Spring 在多執行緒中,bean的注入問題(轉部落格園)
阿新 • • 發佈:2019-02-17
最近碰到了一個問題,使用SSM框架,在Service層需要另開一個執行緒,這個執行緒專門用來做一些操作,並將結果寫入資料庫中。但是線上程中使用@Resource或者@Autowired注入全部為NULL,
原來是Spring不能線上程中注入。
網上的主要解決方法有:
- 將需要的Bean作為執行緒的的建構函式的引數傳入
- 使用ApplicationContext.getBean方法來靜態的獲取Bean
我的執行緒中所需要的Bean的數量較多,並且以後還有可能增加或者減少,所以方法1並不適合
我的Spring配置檔案並不只一個,而且使用getBean方法需要重新載入一遍所有的Bean,這樣也違反的Spring的IoC,並不是我想要的,所以也不採用方法2
最後確定使用內部類的方法,將執行緒中需要的Bean提前注入好,大致的結構如下:
@Service
class TestExample{
//這兩個為執行緒所需要的Bean
@Resource
TestDao testDao;
@Resource
NeedDap needDao;
public void serviceExecute(){
//在這裡開啟執行緒,執行操作
ThreadExample te = new ThreadExample();
te.start();
}
//內部類
private class ThreadExample extends Thread{
public ThreadExample(){
//也可以在建構函式中傳入引數
}
public void run(){
//這裡為執行緒的操作
//就可以使用注入之後Bean了
}
}
}
https://www.cnblogs.com/bencakes/p/6139542.html