@Autowired注入為null的原因與解決方法
前言
我們經(jīng)常會通過@Autowired注解將某個(gè)類注到另一個(gè)類中,但是會發(fā)現(xiàn)注不進(jìn)去,報(bào)NULL。
原因
可能的原因有一下幾種:
(1)該類沒有托管給spring 管理
一般在類的上面添加@Component 就可以了
(2)你的這個(gè)類有被new出來的實(shí)例的,new 過的對象不會交給Spring容器管理 所以里面的 service或者dao注入不進(jìn)來。一般是指引用某些框架,你是繼承某個(gè)接口,但是這些框架默認(rèn)new過這個(gè)方法,比如MVC攔截的HandlerInterceptor類。
如果要new的這個(gè)類里有想用@autowired 自動注入的內(nèi)容,則最好不要去new這個(gè)類,否則自動注入無效,為null;
解決方法
解決辦法:要用這個(gè)類的時(shí)候,這個(gè)類也用@autowired 自動注入
有時(shí)候你確實(shí)需要在這個(gè)new 的類去注入某些類,但是用@Autowired 又注入為null,這時(shí)候我們需要手動去弄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對象實(shí)例后就可以手動獲取Bean的注入實(shí)例對象 */ 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的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
利用Java實(shí)現(xiàn)解析網(wǎng)頁中的內(nèi)容
這篇文章主要為大家詳細(xì)介紹了如何利用Java語言做一個(gè)解析指定網(wǎng)址的網(wǎng)頁內(nèi)容小應(yīng)用,文中的實(shí)現(xiàn)步驟講解詳細(xì),感興趣的可以嘗試下2022-10-10java實(shí)現(xiàn)學(xué)生信息錄入界面
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)學(xué)生信息錄入界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04Mybatis-plus 批量插入太慢的問題解決(提升插入性能)
公司使用的Mybatis-Plus操作SQL,用過Mybatis-Plus的小伙伴一定知道他有很多API提供給我們使用,但是批量插入大數(shù)據(jù)太慢應(yīng)該怎么解決,本文就詳細(xì)的介紹一下,感興趣的可以了解一下2021-11-11spring中向一個(gè)單例bean中注入非單例bean的方法詳解
Spring是先將Bean對象實(shí)例化之后,再設(shè)置對象屬性,所以會先調(diào)用他的無參構(gòu)造函數(shù)實(shí)例化,每個(gè)對象存在一個(gè)map中,當(dāng)遇到依賴,就去map中調(diào)用對應(yīng)的單例對象,這篇文章主要給大家介紹了關(guān)于spring中向一個(gè)單例bean中注入非單例bean的相關(guān)資料,需要的朋友可以參考下2021-07-07idea復(fù)制module(項(xiàng)目)并在一個(gè)窗口展示的教程詳解
這篇文章主要介紹了idea復(fù)制module(項(xiàng)目)并在一個(gè)窗口展示的方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06