[英]How to inject Spring Bean in thread
我有一個正在運行的Spring 3 Web應用程序。 所有Bean均已正確注入,並且一切都按預期進行(所有Web服務調用均正常工作)。
在擴展應用程序時,我需要添加可以通過Web服務啟動和停止的線程。
在線程中,我需要注入一些Spring bean。 這些更新是服務(以@Service注釋)。 在我的applicationContext中,通過組件掃描檢測到Bean:
<context:component-scan base-package="<package>">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>
但是,當我嘗試將線程(使用@Resource)注入bean時,它們始終為“ null”(Spring不會注入它們)。 線程已啟動,但初始化時失敗。
我還嘗試通過在代碼中加載applicationContext來注入它們:(應用程序上下文位於“ src / main / resources”中)
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:*applicationContext.xml");
if(applicationContext.containsBean("BeanName")) {
beanObject = (BeanClass) applicationContext.getBean("BeanName");
} else {
//Exception
}
有誰知道如何在線程中注入bean? 還是不可能在線程中注入bean?
提前致謝!
最好將業務邏輯(取決於您的服務的代碼)與管理線程的基礎結構代碼分開。
例如,您可以聲明一個為您的業務邏輯實現Runnable
的bean,然后在需要啟動Thread
時使用它。
但是,手動啟動Thread
也不是一個好習慣。 最好改用線程池。 實際上,Spring為線程池和異步執行提供了一些內置支持,因此您可以利用它,請參見25.任務執行和調度 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.