SpringBoot @Autowired注入為空的情況解讀
@Autowired注入為空的情況解讀
因最近在開發(fā)中遇到了使用@Autowired注解 自動裝配時,會報空指針,發(fā)現(xiàn)對象并沒有裝配進來,通過查詢,總結(jié)了幾種可能造成這種情況的原因。
記錄下
1.最簡單的一種情況,查看被裝配的類,也就是@Autowired注解下的類是否添加了注解交給SpringBoot托管,@service等注解,或者是直接加上@Component注解。
2.看你的xxxxxApplication是否在根目錄,因為springboot默認掃描的就是啟動類下的目錄(這個我記著只限于Springboot2.0.5之前的版本,因為新版可以通過@ComponenScan注解去指定掃描范圍)。
3.@Service、@Componet、@Configuration、@Repository等Spring注解未被掃描到,例如:springboot的主類掃描規(guī)則,就是說需要查看你的Springboot啟動類,xxxxxApplication,查看啟動類上注解是否加了@ComponenScan注解,是否指定了掃描范圍。
使用springboot啟動類配置掃描的兩種注解配置方式:
- 1、@Controller @EnableAutoConfiguration @ComponentScan 。
- 2、@SpringBootApplication
4.使用救急方法,這是如果沒找到原因,我們先使用其他方法讓程序先能正常運行和調(diào)試,后續(xù)再查找問題。
@Autowired ?private SchedulerFactoryBean schedulerFactoryBean; ? ?? ?private static QuartzManager quartzManager; ? ?? ?/** ? * 通過@PostConstruct實現(xiàn)初始化bean之前進行的操作 ? * @desc 初始化操作,得到QuartzManager實例 ? * @Date 2019年1月7日 ? */ ?@PostConstruct? ?public void init() { ? ? ? ? quartzManager = this; ? ? ? ? quartzManager.schedulerFactoryBean = this.schedulerFactoryBean; ? ? ? ? }
使用@PostConstruct 初始化。
5.這個原因很重要,也是經(jīng)常會被忽略的一個因素。調(diào)用者是new出來的。如果類A中存在成員屬性B, B是通過@Autowired自動注入,而類A的實例是通過new的方式產(chǎn)生的,那么自動注入會失效的,此時通過Spring的上下文獲取所有的Bean的方法來獲取B。此時,看看你在報空指針的那個類,看它是否是被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.
問題原因
這個問題是環(huán)境問題,在Profiles 中之前是dev 環(huán)境
我剛來,猜測是 dev環(huán)境沒有搭建好的原因
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
一文學(xué)會處理SpringBoot統(tǒng)一返回格式
這篇文章主要介紹了一文學(xué)會處理SpringBoot統(tǒng)一返回格式,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-08-08Springboot整合nacos報錯無法連接nacos的解決
這篇文章主要介紹了Springboot整合nacos報錯無法連接nacos的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06SpringBoot集成tomcat詳解實現(xiàn)過程
采用spring boot之后,一切變得如此簡單,打包->java-jar->運維,只需要一個jar包便可以隨意部署安裝。這篇文章,將對 spring boot集成tomcat的源碼進行分析,探索其內(nèi)部的原理2023-02-02springboot controller參數(shù)注入方式
這篇文章主要介紹了springboot controller參數(shù)注入方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05Java數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)之棧和隊列
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)之棧和隊列,文中有非常詳細的代碼示例,對正在學(xué)習(xí)java的小伙伴們有一定的幫助,需要的朋友可以參考下2021-05-05SpringBoot3.2.2整合MyBatis-Plus3.5.5依賴不兼容的問題解決
這篇文章給大家介紹了Spring Boot 3.2.2整合MyBatis-Plus 3.5.5依賴不兼容問題,文中通過代碼示例和圖文介紹的非常詳細,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-01-01