簡體   English   中英

如何在線程中注入Spring Bean

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM