1. ホーム
  2. spring

アプリケーションコンテキスト初期化イベントにフックを追加する方法は?

2023-10-13 15:23:13

質問

通常のサーブレットでは コンテキストリスナー を宣言することができると思いますが、Spring MVCの場合、Springはこれをもっと簡単にできるのでしょうか?

さらに、私がコンテキストリスナーを定義し、その後、私の servlet.xml または applicationContext.xml にアクセスしたいのですが、どうすればよいでしょうか?

どのように解決するのですか?

Springには標準的なイベントがいくつかあり、それを処理することができます。

これを行うには、以下のメソッドを実装したビーンを作成し、登録する必要があります。 ApplicationListener インターフェイスを実装したビーンを作成し、登録する必要があります。

package test.pack.age;

import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;

public class ApplicationListenerBean implements ApplicationListener {

    @Override
    public void onApplicationEvent(ApplicationEvent event) {
        if (event instanceof ContextRefreshedEvent) {
            ApplicationContext applicationContext = ((ContextRefreshedEvent) event).getApplicationContext();
            // now you can do applicationContext.getBean(...)
            // ...
        }
    }
}

次に、このビーンを servlet.xml または applicationContext.xml ファイルを作成します。

<bean id="eventListenerBean" class="test.pack.age.ApplicationListenerBean" />

で、アプリケーションコンテキストが初期化されるとSpringがそれを通知します。

Spring 3では(このバージョンを使っている場合) ApplicationListener クラスは一般的な で、興味のあるイベントの種類を宣言すると、それに応じてイベントがフィルタリングされます。このようにビーンコードを少し単純化することができます。

public class ApplicationListenerBean implements ApplicationListener<ContextRefreshedEvent> {

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        ApplicationContext applicationContext = event.getApplicationContext();
        // now you can do applicationContext.getBean(...)
        // ...
    }
}