1. 程式人生 > >Spring 在多執行緒中,bean的注入問題(轉部落格園)

Spring 在多執行緒中,bean的注入問題(轉部落格園)

最近碰到了一個問題,使用SSM框架,在Service層需要另開一個執行緒,這個執行緒專門用來做一些操作,並將結果寫入資料庫中。但是線上程中使用@Resource或者@Autowired注入全部為NULL
原來是Spring不能線上程中注入。

網上的主要解決方法有:

  1. 將需要的Bean作為執行緒的的建構函式的引數傳入
  2. 使用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