0

スプリング インジェクションを必要とする liferay 6.1.2 でスケジュールされたジョブを実行しています。

サンプルコード -

import com.liferay.portal.kernel.messaging.Message; 
import com.liferay.portal.kernel.messaging.MessageListener; 
import com.liferay.portal.kernel.messaging.MessageListenerException;    
import java.lang.reflect.InvocationTargetException;


public class ScheduledJob implements MessageListener {      

    @Autowired
    private SomeService service;

    @Override
    public void receive(final Message msg) throws MessageListenerException {    
        try {
            service.someMethod();
        } catch (final IllegalAccessException e) {

        } catch (final InvocationTargetException e) {

        }
    }    
}

注入されたサービスは、アプリケーション コンテキストを通じて初期化されず、常に null です。

Auowiring は、他のクラスでは問題なく機能します。ScheduledJob でのみ失敗します。

誰でも解決策を知っていますか?

ありがとう

4

2 に答える 2

0

私は自分で試したことはありませんが、ScheduledJob クラスで ApplicationContextAware インターフェイスを実装して、ここで説明されているように注入された Bean を取得することができます。

于 2013-08-06T20:45:03.650 に答える
0

別のパッケージに 1 つのクラスを作成し、そのクラスでコンストラクターの助けを借りてサービスをオートワイヤーします。これには、クラスに @component アノテーションを配置し、パラメーター化されたコンストラクターに @Autowire アノテーションを配置して、パラメーターに serviceobject を渡します。

このクラスでは、サービスを使用する静的メソッドを 1 つ記述します。このパッケージ名をSpring xmlファイルのcomponentscanタグに入れます。

受信メソッドでは、メソッドが静的であるため、クラス名でそのメソッドを呼び出す必要があります。

于 2016-01-06T17:53:56.753 に答える