1 つの同じメソッドで複数の CDI イベントを観察することは可能ですか?
例 (もちろん動作しません):
private void listener(@Observes ChangeEvt1 || @Observes ChangeEvt2) {
}
同じメソッドを呼び出す 2 つのリスナー メソッドを作成しないようにする方法はありますか?
1 つの同じメソッドで複数の CDI イベントを観察することは可能ですか?
例 (もちろん動作しません):
private void listener(@Observes ChangeEvt1 || @Observes ChangeEvt2) {
}
同じメソッドを呼び出す 2 つのリスナー メソッドを作成しないようにする方法はありますか?
いいえ、これは仕様でカバーされていません。申し訳ありません。このようなことを行う最善の方法は、2 つのメソッドを作成してから、それらにプライベート メソッドなどを呼び出させることです。
また、これが仕様でサポートされていることもありません。オブザーバーがあるときはいつでも、そのメソッドへのパラメーターは、Bean マネージャーが満たさなければならない注入ポイントになります。たとえそれが機能したnull
としても、いずれかのパラメーターを取得するため、実際にどのイベントが発生しているかを知ることは困難です。
少なくとも JBoss 7.1.3 では、これは不可能です。私は認めざるを得ませんが、私はこれをチェックして、わずかに異なる methode signature: void listener(@Observes ChangeEvt1, @Observes ChangeEvt2)
. 私の素朴な考えは、コンテナーが不要なパラメーターを null に設定するというものでした (実際には意味がありません)。JBoss が「注釈付きの複数のイベント パラメータを持つことはできません」で起動に失敗しました@Observes
。
ただし、メソッドの署名が有効であっても、どのパラメーターが渡されたかを確認する必要があります。このアプローチでは、これを単純化することはできません。