【问题标题】:How JEE6 makes the link between Observer and Observee (Observer Pattern)JEE6 如何在 Observer 和 Observee 之间建立联系(观察者模式)
【发布时间】:2011-04-06 03:46:52
【问题描述】:

我已经阅读了一些关于 JEE6 上的观察者模式实现的博客文章,有些事情困扰着我......我找不到任何信息 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
    }

}

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

是通过方法的命名约定吗? (“on”、“after”、“before”……这些词都有意义)

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

我不知道,也看不出还能是什么......

【问题讨论】:

    标签: java ejb java-ee-6 cdi ejb-3.1


    【解决方案1】:

    事件触发和侦听器之间的链接基于事件类型。

    在你的例子中:

    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

    【讨论】:

    • 问题示例中onHelloParis的签名真的正确吗?
    • 已接受的第一个答案 :) 所以在这些例子中,我想知道“onXXX”和“afterXXX”是什么意思......什么都没有?
    • 我猜签名是正确的。这个例子是由 Adam Bien 给出的
    • 它需要一个String,如何连接到合适的事件?
    • @Sebastien Lorber 请注意,显示答案的顺序是随机的,而不是按时间顺序排列的。
    【解决方案2】:

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

    【讨论】:

    • @Sebastien Lorber 你说的“迟到”是什么意思?我的答案是在您提出问题后 5 分钟给出的,比接受的答案早 2 分钟给出。
    • 问题示例中 onHelloParis 的签名真的正确吗?它需要一个String,如何连接到合适的事件?
    • 也许我错了,但无论如何你已经有足够的积分了:p
    猜你喜欢
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    相关资源
    最近更新 更多