@Autowired注入為null的原因與解決方法
前言
我們經(jīng)常會(huì)通過(guò)@Autowired注解將某個(gè)類(lèi)注到另一個(gè)類(lèi)中,但是會(huì)發(fā)現(xiàn)注不進(jìn)去,報(bào)NULL。
原因
可能的原因有一下幾種:
(1)該類(lèi)沒(méi)有托管給spring 管理
一般在類(lèi)的上面添加@Component 就可以了
(2)你的這個(gè)類(lèi)有被new出來(lái)的實(shí)例的,new 過(guò)的對(duì)象不會(huì)交給Spring容器管理 所以里面的 service或者dao注入不進(jìn)來(lái)。一般是指引用某些框架,你是繼承某個(gè)接口,但是這些框架默認(rèn)new過(guò)這個(gè)方法,比如MVC攔截的HandlerInterceptor類(lèi)。
如果要new的這個(gè)類(lèi)里有想用@autowired 自動(dòng)注入的內(nèi)容,則最好不要去new這個(gè)類(lèi),否則自動(dòng)注入無(wú)效,為null;
解決方法
解決辦法:要用這個(gè)類(lèi)的時(shí)候,這個(gè)類(lèi)也用@autowired 自動(dòng)注入
有時(shí)候你確實(shí)需要在這個(gè)new 的類(lèi)去注入某些類(lèi),但是用@Autowired 又注入為null,這時(shí)候我們需要手動(dòng)去弄Spring容器中的Bean實(shí)現(xiàn)ApplicationContextAware接口。
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class BeanUtils implements ApplicationContextAware {
protected static ApplicationContext applicationContext ;
@Override
public void setApplicationContext(ApplicationContext arg0) throws BeansException {
if (applicationContext == null) {
applicationContext = arg0;
}
}
public static Object getBean(String name) {
//name表示其他要注入的注解name名
return applicationContext.getBean(name);
}
/**
* 拿到ApplicationContext對(duì)象實(shí)例后就可以手動(dòng)獲取Bean的注入實(shí)例對(duì)象
*/
public static <T> T getBean(Class<T> clazz) {
return applicationContext.getBean(clazz);
}
}案列:
SysDictService sysDictService = BeanUtils.getBean(SysDictService.class);
以上就是@Autowired注入為null的原因與解決方法的詳細(xì)內(nèi)容,更多關(guān)于@Autowired注入為null的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
jackson 實(shí)現(xiàn)null轉(zhuǎn)0 以及0轉(zhuǎn)null的示例代碼
這篇文章主要介紹了jackson 實(shí)現(xiàn)null轉(zhuǎn)0 以及0轉(zhuǎn)null的示例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09
SpringBoot Tomcat啟動(dòng)實(shí)例代碼詳解
這篇文章主要介紹了SpringBoot Tomcat啟動(dòng)實(shí)例代碼詳解,需要的朋友可以參考下2017-09-09
數(shù)據(jù)庫(kù)CURD必備搭檔mybatis?plus詳解
這篇文章主要為大家介紹了數(shù)據(jù)庫(kù)CURD必備搭檔mybatis?plus詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
集合框架及背后的數(shù)據(jù)結(jié)構(gòu)
本文主要介紹了Java的集合框架Java?Collection?Framework,接口interface以及背后的數(shù)據(jù)結(jié)構(gòu),感興趣的同學(xué)可以閱讀參考2023-03-03
如何解決UnsupportedOperationException異常問(wèn)題
這篇文章主要介紹了如何解決UnsupportedOperationException異常問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05
SpringBoot和MyBatis環(huán)境下實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)源切換過(guò)程
dynamic-datasource-spring-boot-starter?是一個(gè)用于在SpringBoot和MyBatis環(huán)境下實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)源切換的工具,它簡(jiǎn)化了配置和切換邏輯,通過(guò)引入依賴(lài),配置數(shù)據(jù)源和使用@DS注解,可以輕松實(shí)現(xiàn)數(shù)據(jù)源的動(dòng)態(tài)切換2025-10-10

