- Java EE 8 and Angular
- Prashant Padmanabhan
- 283字
- 2021-07-02 19:22:34
Enhancing events
CDI 1.1 had an event notification model, which has become popular among developers as it helps with the decoupling of code, following the observer pattern. Version 2.0 builds on this model and adds more enhancements, such as asynchronous event processing along with the ordering of events. To observe an event, the bean simply defines a method that has the @Observes annotation, and a parameter type that is used by CDI to identify the event type (class type), which should be passed to this method:
public void process(@Observes Task task) { }
Further restrictions on which events are passed to the observer method can be applied by using qualifiers at the injection point. Interestingly, the observer can work with generic types as well. Given the following two observers, the container will invoke the appropriate method based on the parameterized type of the event:
public void processTaskList(@Observes List<Task> taskList) { }
public void processTaskIds(@Observes List<Integer> taskIdList) { }
The raising of events is done using the Event interface methods for firing either synchronous or asynchronous events with a payload. The order in which the observers are called is not defined, unless the ordered events approach mentioned later is followed. It’s also possible to change the data in an observer, since the data (or payload) passed is not mandated to be immutable. Here's the relevant portion of the code snippet used for firing an event:
@Inject Event<Task> event;
public void doSomething() {
event.fire( new Task() );
}
The corresponding observer would be as follows:
public void handle(@Observes Task task) {
// can update the task instance
}
With CDI 2 offering asynchronous events and ordered events, let's explore each in more detail.
- Programming ArcGIS 10.1 with Python Cookbook
- Building a Recommendation Engine with Scala
- Learning Apache Kafka(Second Edition)
- Android 應用案例開發大全(第3版)
- Working with Odoo
- 單片機C語言程序設計實訓100例
- OpenGL Data Visualization Cookbook
- Solr Cookbook(Third Edition)
- PHP編程基礎與實踐教程
- Red Hat Enterprise Linux Troubleshooting Guide
- Hands-On JavaScript for Python Developers
- Drupal 8 Development:Beginner's Guide(Second Edition)
- HTML5移動前端開發基礎與實戰(微課版)
- C++17 By Example
- Mastering Android Application Development