您好,登錄后才能下訂單哦!
這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)springboot中autowire注入為null如何解決,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
這個問題困擾了很久,有些類不是controller在使用autowired注入的類顯示為空,找到網(wǎng)上的方法是在類初始化時主動注入被Autowired的類,如下圖
這樣的方法是可行的,最后引用時使用上圖中doubleTeachSendMsg.doubleTeachService.sendMsg();方法即可,但是使用起來未免太麻煩,而且也不是spring依賴注入的原則,這個出現(xiàn)原因其實就是此類是在bean加載之前被調(diào)用,或者springboot在加載時沒有識別到此類,所以注入為空,要想使此類被識別到,那么就要在啟動時被spring識別到,需要將其變?yōu)閎ean對象并被識別到。如下圖
springboot啟動會掃描configuration,正常添加信息在最下面的是new MyWebSocketHandler(),在此處使用spring的依賴注入,使spring識別到此類,這樣,添加的autowired方法就不會是null了,并且也不需要在添加 這種方式了
補(bǔ)充:關(guān)于springboot使用@Autowired注解向非controller類中注入bean為null的問題
這種問題一般分為2種情況
如果你要在java A類中 使用@Autowired注入java B類,如果注入不了的話,通過添加以下三個關(guān)鍵的地方,可以解決該問題:
關(guān)于@PostConstruct:被@PostConstruct修飾的方法會在服務(wù)器加載Servlet的時候運(yùn)行,并且只會被服務(wù)器調(diào)用一次,類似于Serclet的inti()方法。
被@PostConstruct修飾的方法會在構(gòu)造函數(shù)之后,init()方法之前運(yùn)行
@Component public class A{ @Autowired public B b; public static A a; @PostConstruct //通過@PostConstruct實現(xiàn)初始化bean之前進(jìn)行的操作 public void init() { a= this; a.b= this.b; }
1.@Component
2.public static A a; 注意這個為 public 不然沒有權(quán)限
3.@PostConstruct public void init() {}
你要被注入的類繼承了thread類,這樣的話你通過上面的方法來做的,仍然注入不進(jìn)去,原因是因為spring的非線程安全問題,不讓你注入,注入的結(jié)果是null
解決辦法寫一個構(gòu)造函數(shù)或者set和get方法把你要注入的service傳進(jìn)來就好
上述就是小編為大家分享的springboot中autowire注入為null如何解決了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。