SpringBoot @Autowired注入為空的情況解讀
@Autowired注入為空的情況解讀
因最近在開發(fā)中遇到了使用@Autowired注解 自動(dòng)裝配時(shí),會(huì)報(bào)空指針,發(fā)現(xiàn)對(duì)象并沒有裝配進(jìn)來,通過查詢,總結(jié)了幾種可能造成這種情況的原因。
記錄下
1.最簡單的一種情況,查看被裝配的類,也就是@Autowired注解下的類是否添加了注解交給SpringBoot托管,@service等注解,或者是直接加上@Component注解。
2.看你的xxxxxApplication是否在根目錄,因?yàn)閟pringboot默認(rèn)掃描的就是啟動(dòng)類下的目錄(這個(gè)我記著只限于Springboot2.0.5之前的版本,因?yàn)樾掳婵梢酝ㄟ^@ComponenScan注解去指定掃描范圍)。
3.@Service、@Componet、@Configuration、@Repository等Spring注解未被掃描到,例如:springboot的主類掃描規(guī)則,就是說需要查看你的Springboot啟動(dòng)類,xxxxxApplication,查看啟動(dòng)類上注解是否加了@ComponenScan注解,是否指定了掃描范圍。
使用springboot啟動(dòng)類配置掃描的兩種注解配置方式:
- 1、@Controller @EnableAutoConfiguration @ComponentScan 。
- 2、@SpringBootApplication
4.使用救急方法,這是如果沒找到原因,我們先使用其他方法讓程序先能正常運(yùn)行和調(diào)試,后續(xù)再查找問題。
@Autowired
?private SchedulerFactoryBean schedulerFactoryBean;
? ??
?private static QuartzManager quartzManager;
? ??
?/**
? * 通過@PostConstruct實(shí)現(xiàn)初始化bean之前進(jìn)行的操作
? * @desc 初始化操作,得到QuartzManager實(shí)例
? * @Date 2019年1月7日
? */
?@PostConstruct?
?public void init() { ?
? ? ? quartzManager = this; ?
? ? ? quartzManager.schedulerFactoryBean = this.schedulerFactoryBean; ? ? ? ?
}使用@PostConstruct 初始化。
5.這個(gè)原因很重要,也是經(jīng)常會(huì)被忽略的一個(gè)因素。調(diào)用者是new出來的。如果類A中存在成員屬性B, B是通過@Autowired自動(dòng)注入,而類A的實(shí)例是通過new的方式產(chǎn)生的,那么自動(dòng)注入會(huì)失效的,此時(shí)通過Spring的上下文獲取所有的Bean的方法來獲取B。此時(shí),看看你在報(bào)空指針的那個(gè)類,看它是否是被new出來的,如果是,不妨使用SpringUtil.getBean()方法替換下, 然后再試下!
@Autowired注入bean找不到異常
異常描述
***************************
APPLICATION FAILED TO START
***************************Description:
Field clientAuthService in com.yinhai.mzgh.eurekaclient.feign.interceptor.Oauth2RequestInterceptor
required a bean of type 'com.yinhai.mzgh.eurekaclient.feign.service.ClientAuthService' that could not be found.The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
Action:Consider defining a bean of type 'com.yinhai.mzgh.eurekaclient.feign.service.ClientAuthService' in your configuration.
問題原因
這個(gè)問題是環(huán)境問題,在Profiles 中之前是dev 環(huán)境

我剛來,猜測(cè)是 dev環(huán)境沒有搭建好的原因
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring自帶定時(shí)任務(wù)@Scheduled注解實(shí)例講解
這篇文章主要介紹了Spring自帶定時(shí)任務(wù)@Scheduled注解的相關(guān)知識(shí),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-06-06
Spring @Value如何通過${}、#{}注入不同類型的值
這篇文章主要介紹了Spring @Value如何通過${}、#{}注入不同類型的值問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
Java如何主動(dòng)從當(dāng)前線程獲取異常信息
這篇文章主要介紹了Java如何主動(dòng)從當(dāng)前線程獲取異常信息,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10
關(guān)于SpringCloud灰度發(fā)布的實(shí)現(xiàn)
這篇文章主要介紹了關(guān)于SpringCloud灰度發(fā)布的實(shí)現(xiàn),灰度發(fā)布又稱金絲雀發(fā)布,是在系統(tǒng)升級(jí)的時(shí)候能夠平滑過渡的一種發(fā)布方式,灰度發(fā)布可以保證整體系統(tǒng)的穩(wěn)定,在初始灰度的時(shí)候就可以發(fā)現(xiàn)、調(diào)整問題,以保證其影響度,需要的朋友可以參考下2023-08-08
springboot接口如何多次獲取request中的body內(nèi)容
這篇文章主要介紹了springboot接口多次獲取request中的body內(nèi)容的過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06

