Springアプリケーションコンテキストイベント

Springアプリケーションコンテキストイベント

1. 前書き

このチュートリアルでは、Springフレームワークによって提供されるイベントサポートメカニズムについて学習します。 フレームワークによって提供されるさまざまな組み込みイベントを調べてから、イベントを消費する方法を確認します。

カスタムイベントの作成と公開については、our previous tutorial here.をご覧ください。

Springには、ApplicationContext.を中心に構築されたイベントメカニズムがあります。exchange information between different beans.に使用できます。イベントをリッスンし、カスタムコードを実行することで、アプリケーションイベントを利用できます。

たとえば、ここでのシナリオは、ApplicationContextの完全な起動時にカスタムロジックを実行することです。

2. 標準コンテキストイベント

実際、Springにはさまざまな組み込みイベントがあり、それらはlets a developer hook into the lifecycle of an application and the contextであり、いくつかのカスタム操作を実行します。

アプリケーションでこれらのイベントを手動で使用することはほとんどありませんが、フレームワークはそれ自体を集中的に使用します。 春のさまざまな組み込みイベントを探索することから始めましょう。

2.1. ContextRefreshedEvent

いずれかのinitializing or refreshing the*ApplicationContext*,で、SpringはContextRefreshedEventを上げます。 通常、コンテキストが閉じられていない限り、更新は複数回トリガーされます。

ConfigurableApplicationContextインターフェイスでrefresh()メソッドを呼び出すことにより、イベントを手動でトリガーすることもできます。

2.2. ContextStartedEvent

ConfigurableApplicationContext,By calling the start() methodは、このイベントをトリガーし、ApplicationContextを開始します。 実際、このメソッドは通常、明示的な停止後にBeanを再起動するために使用されます。 また、このメソッドを使用して、自動起動用の構成のないコンポーネントを処理することもできます。

ここで、start()の呼び出しは、ではなく常に明示的であることに注意することが重要です。 リフレッシュする ().

2.3. ContextStoppedEvent

ContextStoppedEventは、ConfigurableApplicationContext.stop()メソッドを呼び出すことにより、when the ApplicationContext is stoppedで公開されます。前述のように、start()メソッドを使用して停止イベントを再開できます。

2.4. ContextClosedEvent

このイベントは、ConfigurableApplicationContextclose()メソッドを使用して、when the ApplicationContext is closedで公開されます。 実際には、コンテキストを閉じた後、それを再起動することはできません。

コンテキストは閉じると寿命に達するため、ContextStoppedEvent.のように再起動することはできません

3. @EventListener

次に、公開されたイベントを使用する方法を調べてみましょう。 バージョン4.2以降、Springはアノテーション駆動型イベントリスナーをサポートします–@EventListener.

特に、automatically register an ApplicationListener based on the signature of the methodへのこの注釈を利用できます:

@EventListener
public void handleContextRefreshEvent(ContextStartedEvent ctxStartEvt) {
    System.out.println("Context Start Event received.");
}

重要なのは、@EventListener is a core annotation and hence doesn’t need any extra configurationです。 実際、既存の<context:annotation-driven/>要素はそれを完全にサポートします。

@EventListenerアノテーションが付けられたメソッドは、非void型を返すことができます。 返される値がnullでない場合、イベントメカニズムはそのイベントに対して新しいイベントを発行します。

3.1. 複数のイベントを聞く

現在、リスナーが複数のイベントを消費する必要がある状況が発生する可能性があります。

このようなシナリオでは、classes属性を利用できます。

@EventListener(classes = { ContextStartedEvent.class, ContextStoppedEvent.class })
public void handleMultipleEvents() {
    System.out.println("Multi-event listener invoked");
}

4. アプリケーションイベントリスナー

以前のバージョンのSpring(<4.2)を使用している場合は、イベントをリッスンするためにcustom ApplicationEventListener and override the method onApplicationEventを導入する必要があります。

5. 結論

この記事では、Springのさまざまな組み込みイベントについて説明しました。 さらに、公開されたイベントを聞くためのさまざまな方法を見てきました。

いつものように、記事で使用されているコードスニペットはover on Githubにあります。