@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
以外の戻り値の型が含まれる場合があります。その場合、メソッド呼び出しの結果は新しいイベントとして送信されます。戻り値の型が配列またはコレクションの場合、各要素は新しい個別のイベントとして送信されます。
このアノテーションは、カスタム構成アノテーションを作成するためのメタアノテーションとして使用することができます。
イベントリスナが任意の例外型をスローすることを宣言することは可能ですが、イベントパブリッシャーはランタイム例外しか処理できないため、イベントリスナからスローされるチェック済み例外は UndeclaredThrowableException
SE にラップされます。
特定のリスナーでイベントを非同期に処理する場合は、Spring の @Async
サポートを使用できますが、非同期イベントを使用する場合は次の制限に注意してください。
AsyncUncaughtExceptionHandler
を参照してください。ApplicationEventPublisher
を挿入してイベントを手動で公開します。 特定のイベントのリスナーが呼び出される順序を定義することもできます。そのためには、Spring の共通 @Order
アノテーションをこのイベントリスナーアノテーションと一緒に追加します。
EventListenerMethodProcessor
, TransactionalEventListener
public abstract StringSE condition
式がブール true
または文字列 "true"
、"on"
、"yes"
または "1"
のいずれかに評価された場合、イベントが処理されます。
デフォルトの式は ""
です。つまり、イベントは常に処理されます。
SpEL 式は、次のメタデータを提供する専用のコンテキストに対して評価されます。
ApplicationEvent
への参照には #root.event
または event
#root.args
または args
#root.args[0]
、args[0]
、#a0
または #p0
を介してアクセスできます。public abstract StringSE id
SmartApplicationListener.getListenerId()
, ApplicationEventMulticaster.removeApplicationListeners(Predicate)