1. 序章

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

カスタムイベントの作成と公開については、以前のチュートリアルをご覧ください。

春には、周りに構築されたイベントメカニズムがあります ApplicationContext。 それはに使用することができます異なるBean間で情報を交換します。 イベントをリッスンし、カスタムコードを実行することで、アプリケーションイベントを利用できます。

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

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

実際、Springにはさまざまな組み込みイベントがあり、を使用すると、開発者はアプリケーションとコンテキストのライフサイクルにフックし、カスタム操作を実行できます。

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

2.1. ContextRefreshedEvent

の初期化またはApplicationContextの更新時に、SpringはContextRefreshedEventを発生させます。 通常、コンテキストが閉じられていない限り、更新は複数回トリガーされる可能性があります。

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

2.2. ContextStartedEvent

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

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

2.3. ContextStoppedEvent

A ContextStoppedEvent 公開されています ApplicationContextが停止したとき 、を呼び出すことによって止まる() 上のメソッド ConfigurableApplicationContext。 前に説明したように、を使用して停止したイベントを再開できます。 始める() 方法。

2.4. ContextClosedEvent

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

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

3. @EventListener

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

特に、このアノテーションを利用して、メソッドのシグネチャに基づいて自動的にApplicationListenerを登録できます。

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

重要なことに、 @EventListenerはコアアノテーションであるため、追加の構成は必要ありません。 実際、既存の elementはそれを完全にサポートします。

@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)を使用している場合は、 カスタムApplicationEventListenerを使用して、メソッドonApplicationEventをオーバーライドしますイベントを聞くために。

5. 結論

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

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