JEE6はオブザーバーとObservee(Observerパターン)との間のリンクを作る方法
質問
IましJEE6上のObserverパターンの実装に関するいくつかのブログの記事を読んで、何か私を気に...私は気圧の任意の情報を見つけることができませんので、私はそこを尋ねる...
私は、次のexemplesを見つけた。
@Stateless
[...]
public class ParisJugService {
@Inject
Event event;
public void helloParis(){
System.out.println("Hello Paris");
event.fire("hello Paris invoked!");
}
}
@Stateless
public class EventReceiver {
public void onHelloParis(@Observes String message){
System.out.println("----------- " + message);
}
}
と
public class MyEvent {
String data;
Date eventTime;
....
}
public class EventProducer {
@Inject @Any Event<MyEvent> event;
public void doSomething() {
MyEvent e=new MyEvent();
e.data="This is a test event";
e.eventTime=new Date();
event.fire(e);
}
}
public class EventConsumer {
public void afterMyEvent(@Observes MyEvent event) {
// .. Insert event logic here
}
}
は、私が理解できないイベントコンシューマとイベントプロデューサとの間のリンクがどのように行われるか...
これは、メソッドの命名規則でますか? (どこの言葉は、「オン」、「後」、「前」...意味を持つことになります)。
それは与えられた引数(ここでは文字列とMyEvent)の比較によってですか?
私が知ることができず、それができる他に何が表示されない...
解決
イベント発火とリスナーの間のリンクは、イベントの種類に基づいています。
あなたの例でます:
public class EventConsumer {
public void afterMyEvent(@Observes MyEvent event) {
// .. Insert event logic here
}
}
彼らはどこから来たすべてを受け取ることになります。このクラスは、型MyEventのイベントを解雇します。
ソース:ます。http://ダウンロード-llnw.oracle.com/javaee/6/api/javax/enterprise/event/Observes.htmlする
他のヒント
コンテナは、内部のすべてのBeanに関するメタデータを保持します。起動時に、それは彼らが観察のイベントタイプの(引数のClass
)と一緒に、すべてのオブザーバメソッドを登録します。イベントが発生するたびに、オブザーバーのリストは、イベントの適切なタイプを受け入れるメソッドがチェックされます。
所属していません StackOverflow