1

JEE6 での Observer パターンの実装に関するいくつかのブログ記事を読みましたが、何か気になります...情報 atm が見つからないので、そこで質問します...

次の例を見つけました。

@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
    }

}

イベント コンシューマーとイベント プロデューサーの間のリンクがどのように行われるのか理解できません...

メソッドの命名規則によるものですか?(「オン」、「後」、「前」という言葉には意味があります)

指定された引数 (ここでは String と MyEvent) の比較によるものですか?

他に何ができるのかわかりません...

4

2 に答える 2

6

コンテナーは、コンテナー内のすべての Bean に関するメタデータを保持します。起動時に、監視するイベント タイプ(Class引数の)とともにすべてのオブザーバー メソッドを登録します。イベントが発生するたびに、適切なタイプのイベントを受け入れるメソッドについて、オブザーバーのリストがチェックされます。

于 2010-08-31T08:33:49.510 に答える
2

イベントの発生とリスナーの間のリンクは、イベントの種類に基づいています。

あなたの例では:

public class EventConsumer {

    public void afterMyEvent(@Observes MyEvent event) {
        // .. Insert event logic here
    }

}

このクラスは、発生した MyEvent タイプのすべてのイベントを、その発生元に関係なく受け取ります。

ソース: http://download-llnw.oracle.com/javaee/6/api/javax/enterprise/event/Observes.html

于 2010-08-31T08:35:34.163 に答える