Как Jee6 делает связь между наблюдателем и наблюдателем (шаблон наблюдателя)
Вопрос
Я прочитал несколько статей в блоге о реализации шаблона наблюдателя на Jee6 и что-то беспокоит меня ... Я не могу найти никакой информационной атм, поэтому я прошу там ...
Я нашел следующие примеры:
@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
}
}
Я не могу понять, как проводится связь между потребителем событий и производителем событий ...
Это под названием «Конвенция о методах»? (Где слова «на», «после», «раньше» ... будут иметь смысл)
Это путем сравнения заданных аргументов (здесь строка и моюэээээээммент)?
Я не могу знать и не вижу, что еще это было ...
Решение
Ссылка между стрельбой события и слушателем основана на типе события.
В вашем примере:
public class EventConsumer {
public void afterMyEvent(@Observes MyEvent event) {
// .. Insert event logic here
}
}
Этот класс получит все выпущенные события типа MyEvent, где бы они ни пришли.
Источник: http://download-llnw.orcle.com/javaee/6/api/javax/enterprise/event/observes.html.
Другие советы
Контейнер сохраняет метаданные обо всех бобах внутри него. На Startup это регистрирует все методы наблюдателя вместе с тип события (то Class
аргумента) они наблюдают. Всякий раз, когда событие уволено, список наблюдателей проверяется на методы, которые принимают соответствующий тип события.