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