JEE6如何在Observer和Observee之间建立联系(观察者模式)

Seb*_*ber 1 java ejb cdi java-ee-6 ejb-3.1

我已经阅读了一些关于JEE6上Observer模式实现的博客文章,还有什么困扰我......我找不到任何信息,所以我问那里......

我发现了以下例子:

@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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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
    }

}
Run Code Online (Sandbox Code Playgroud)

我无法理解事件消费者和事件生产者之间的联系是如何完成的......

它是通过命名方法的约定吗?(其中"on","after","before"......之后会有意义)

是通过比较给定的参数(这里是String和MyEvent)吗?

我不知道,也看不出它还有什么......

Boz*_*zho 6

容器保存有关其中所有bean的元数据.在启动时,它会将所有观察者方法与他们观察到的事件类型(Class参数)一起注册.每当触发事件时,都会检查观察者列表以查找接受适当类型事件的方法.