這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)springboot中autowire注入為null如何解決,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
成都創(chuàng)新互聯(lián)成立與2013年,先為江陵等服務(wù)建站,江陵等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為江陵企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。這個(gè)問(wèn)題困擾了很久,有些類不是controller在使用autowired注入的類顯示為空,找到網(wǎng)上的方法是在類初始化時(shí)主動(dòng)注入被Autowired的類,如下圖
這樣的方法是可行的,最后引用時(shí)使用上圖中doubleTeachSendMsg.doubleTeachService.sendMsg();方法即可,但是使用起來(lái)未免太麻煩,而且也不是spring依賴注入的原則,這個(gè)出現(xiàn)原因其實(shí)就是此類是在bean加載之前被調(diào)用,或者springboot在加載時(shí)沒(méi)有識(shí)別到此類,所以注入為空,要想使此類被識(shí)別到,那么就要在啟動(dòng)時(shí)被spring識(shí)別到,需要將其變?yōu)閎ean對(duì)象并被識(shí)別到。如下圖
springboot啟動(dòng)會(huì)掃描configuration,正常添加信息在最下面的是new MyWebSocketHandler(),在此處使用spring的依賴注入,使spring識(shí)別到此類,這樣,添加的autowired方法就不會(huì)是null了,并且也不需要在添加 這種方式了
補(bǔ)充:關(guān)于springboot使用@Autowired注解向非controller類中注入bean為null的問(wèn)題
這種問(wèn)題一般分為2種情況
如果你要在java A類中 使用@Autowired注入java B類,如果注入不了的話,通過(guò)添加以下三個(gè)關(guān)鍵的地方,可以解決該問(wèn)題:
關(guān)于@PostConstruct:被@PostConstruct修飾的方法會(huì)在服務(wù)器加載Servlet的時(shí)候運(yùn)行,并且只會(huì)被服務(wù)器調(diào)用一次,類似于Serclet的inti()方法。
被@PostConstruct修飾的方法會(huì)在構(gòu)造函數(shù)之后,init()方法之前運(yùn)行
@Component public class A{ @Autowired public B b; public static A a; @PostConstruct //通過(guò)@PostConstruct實(shí)現(xiàn)初始化bean之前進(jìn)行的操作 public void init() { a= this; a.b= this.b; }
1.@Component
2.public static A a; 注意這個(gè)為 public 不然沒(méi)有權(quán)限
3.@PostConstruct public void init() {}
你要被注入的類繼承了thread類,這樣的話你通過(guò)上面的方法來(lái)做的,仍然注入不進(jìn)去,原因是因?yàn)閟pring的非線程安全問(wèn)題,不讓你注入,注入的結(jié)果是null
解決辦法寫一個(gè)構(gòu)造函數(shù)或者set和get方法把你要注入的service傳進(jìn)來(lái)就好
上述就是小編為大家分享的springboot中autowire注入為null如何解決了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。