解決springboot遇到autowire注入為null的問題
這個問題困擾了很久,有些類不是controller在使用autowired注入的類顯示為空,找到網(wǎng)上的方法是在類初始化時主動注入被Autowired的類,如下圖

這樣的方法是可行的,最后引用時使用上圖中doubleTeachSendMsg.doubleTeachService.sendMsg();方法即可,但是使用起來未免太麻煩,而且也不是spring依賴注入的原則,這個出現(xiàn)原因其實就是此類是在bean加載之前被調用,或者springboot在加載時沒有識別到此類,所以注入為空,要想使此類被識別到,那么就要在啟動時被spring識別到,需要將其變?yōu)閎ean對象并被識別到。如下圖

springboot啟動會掃描configuration,正常添加信息在最下面的是new MyWebSocketHandler(),在此處使用spring的依賴注入,使spring識別到此類,這樣,添加的autowired方法就不會是null了,并且也不需要在添加 這種方式了

補充:關于springboot使用@Autowired注解向非controller類中注入bean為null的問題
這種問題一般分為2種情況
第一種情況:
如果你要在java A類中 使用@Autowired注入java B類,如果注入不了的話,通過添加以下三個關鍵的地方,可以解決該問題:
關于@PostConstruct:被@PostConstruct修飾的方法會在服務器加載Servlet的時候運行,并且只會被服務器調用一次,類似于Serclet的inti()方法。
被@PostConstruct修飾的方法會在構造函數(shù)之后,init()方法之前運行
@Component
public class A{
@Autowired
public B b;
public static A a;
@PostConstruct //通過@PostConstruct實現(xiàn)初始化bean之前進行的操作
public void init() {
a= this;
a.b= this.b;
}
有三個地方需要注意一下(敲黑板!):
1.@Component
2.public static A a; 注意這個為 public 不然沒有權限
3.@PostConstruct public void init() {}
第二種情況:
你要被注入的類繼承了thread類,這樣的話你通過上面的方法來做的,仍然注入不進去,原因是因為spring的非線程安全問題,不讓你注入,注入的結果是null
解決辦法寫一個構造函數(shù)或者set和get方法把你要注入的service傳進來就好
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關文章
tomcat報錯:Wrapper cannot find servlet class ...問題解決
這篇文章主要介紹了tomcat報錯:Wrapper cannot find servlet class ...問題解決的相關資料,需要的朋友可以參考下2016-11-11
java實現(xiàn)socket從服務器連續(xù)獲取消息的示例
這篇文章主要介紹了java實現(xiàn)socket從服務器連續(xù)獲取消息的示例,需要的朋友可以參考下2014-04-04
Springboot打包為Docker鏡像并部署的實現(xiàn)
這篇文章主要介紹了Springboot打包為Docker鏡像并部署的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-12-12

