上QQ阅读APP看书,第一时间看更新
How to do it...
This recipe will show you one of the main features introduced by CDI 2.0: Ordered Observers. Now, you can turn the observers job into something predictable:
- First, let's make an event to be observed:
public class MyEvent {
private final String value;
public MyEvent(String value){
this.value = value;
}
public String getValue(){
return value;
}
}
- Now, we build our observers and the server that will fire them:
public class OrderedObserver {
public static void main(String[] args){
try(SeContainer container =
SeContainerInitializer.newInstance().initialize()){
container
.getBeanManager()
.fireEvent(new MyEvent("event: " +
System.currentTimeMillis()));
}
}
public void thisEventBefore(
@Observes @Priority(Interceptor.Priority
.APPLICATION - 200)
MyEvent event){
System.out.println("thisEventBefore: " + event.getValue());
}
public void thisEventAfter(
@Observes @Priority(Interceptor.Priority
.APPLICATION + 200)
MyEvent event){
System.out.println("thisEventAfter: " + event.getValue());
}
}
Also, don't forget to add the beans.xml file into the META-INF folder:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
bean-discovery-mode="all">
</beans>
- Once you run it, you should see a result like this:
INFO: WELD-ENV-002003: Weld SE container
353db40d-e670-431d-b7be-4275b1813782 initialized
thisEventBefore: event -> 1501818268764
thisEventAfter: event -> 1501818268764