Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Explanation of the @Observes Annotation

Header Image

Ahoy there, mateys! Today, we’ll be discussing the @Observes annotation in CDI. This annotation is used to specify a method that should be called when a particular event is fired. It’s an essential feature of CDI that helps you build loosely coupled and flexible applications. So, let’s dive in and explore this annotation together!

How the @Observes Annotation Works

Before we talk about the @Observes annotation, let’s understand what events are in CDI. An event is a message that is broadcasted by a CDI bean to all interested listeners. It’s a way for beans to communicate with each other in a decoupled and modular way. An event can be anything, from a simple notification to a complex object.

To use the @Observes annotation, you need to define an event first. You can do that by creating a custom event class or by using an existing CDI event. Once you have your event class, you can fire it from any CDI bean using the Event interface. Here’s an example:

@Inject
Event<MyEvent> event;

public void doSomething() {
  MyEvent myEvent = new MyEvent();
  event.fire(myEvent);
}

In this example, we’re injecting the Event interface into our bean and using it to fire a MyEvent instance. When we fire the event, CDI will look for all beans that have a method with the @Observes annotation and pass the event object as an argument to those methods.

Here’s an example of a bean that listens to MyEvent:

public class MyListener {
  public void onMyEvent(@Observes MyEvent event) {
    // Handle the event
  }
}

In this example, we have a bean that has a method called onMyEvent with the @Observes annotation. This method will be called whenever a MyEvent is fired, and it will receive the event object as an argument.

Conclusion

The @Observes annotation is a powerful feature of CDI that allows you to build flexible and decoupled applications. It’s a way to communicate between beans without creating tight coupling between them. By using events and listeners, you can build modular and extensible applications that can be easily maintained and extended over time.

We hope you found this article informative and fun. Don’t forget to check out our other pirate-themed instructional articles! Happy coding, mateys!