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了

        }
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM