@TargetSE(valueSE={METHODSE,ANNOTATION_TYPESE}) @RetentionSE(valueSE=RUNTIMESE) @DocumentedSE public @interface EventListener
アノテーション付きメソッドが単一のイベント型をサポートする場合、メソッドは、リッスンするイベント型を反映する単一のパラメーターを宣言する場合があります。アノテーション付きメソッドが複数のイベント型をサポートする場合、このアノテーションは classes
属性を使用して、サポートされている 1 つ以上のイベント型を参照する場合があります。詳細については、classes()
javadoc を参照してください。
イベントは、ApplicationEvent
インスタンスや任意のオブジェクトにすることができます。
@EventListener
アノテーションの処理は、Java 構成を使用する場合は自動的に登録され、XML 構成を使用する場合は <context:annotation-config/>
または <context:component-scan/>
要素を介して手動で登録される内部 EventListenerMethodProcessor
Bean を介して実行されます。
アノテーション付きメソッドには、void
以外の戻り値の型が含まれる場合があります。その場合、メソッド呼び出しの結果は新しいイベントとして送信されます。戻り値の型が配列またはコレクションの場合、各要素は新しい個別のイベントとして送信されます。
特定のイベントのリスナーが呼び出される順序を定義することもできます。そのためには、Spring の共通 @Order
アノテーションをこのイベントリスナーアノテーションと一緒に追加します。
イベントリスナが任意の例外型をスローすることを宣言することは可能ですが、イベントパブリッシャーはランタイム例外しか処理できないため、イベントリスナからスローされるチェック済み例外は UndeclaredThrowableException
SE にラップされます。
EventListenerMethodProcessor
public abstract StringSE condition
デフォルトは ""
です。つまり、イベントは常に処理されます。
SpEL 式は、次のメタデータを提供する専用のコンテキストに対して評価します。
#root.event
、#root.args
は、それぞれ ApplicationEvent
およびメソッド引数への参照です。#root.args[0]
、#p0
、#a0
を介してアクセスできます。その情報が利用可能な場合、引数は名前でアクセスすることもできます。