2

Spring3Webアプリケーションを実行しています。すべてのBeanが正しく注入され、すべてが正常に機能しています(すべてのWebサービス呼び出しが正しく機能しています)。

アプリケーションを拡張する際に、Webサービスを介して開始および停止できるスレッドを追加する必要がありました。

スレッドでは、いくつかのSpringBeanを注入する必要があります。これらのbeensはサービスです(@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はBeanを注入しません)。スレッドは開始されますが、初期化中に失敗します。

また、コードにapplicationContextをロードしてそれらを挿入しようとしました:(アプリケーションコンテキストは'src / main / resources'にあります)

ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:*applicationContext.xml");

if(applicationContext.containsBean("BeanName")) {

        beanObject = (BeanClass) applicationContext.getBean("BeanName");

} else {

    //Exception
}

誰かがスレッドに豆を注入する方法を知っていますか?または、スレッドにBeanを注入することはできませんか?

前もって感謝します!

4

1 に答える 1

1

スレッドを管理するインフラストラクチャ コードからビジネス ロジック (サービスに依存するコード) を分離することをお勧めします。

たとえば、Runnableビジネス ロジックを実装する Bean を宣言し、それを開始する必要があるときに使用できますThread

ただし、Thread手動で s を開始することもお勧めできません。代わりにスレッド プールを使用することをお勧めします。実際、Spring はスレッド プールと非同期実行の組み込みサポートを提供しているため、それを活用できます。 25. タスクの実行とスケジューリングを参照してください。

于 2012-04-13T17:01:09.870 に答える