2 min read

(For more resources related to this topic, see here.)

What is a payload?

The payload of an event, the event object, carries any necessary state from the producer to the consumer and is nothing but an instance of a Java class.

An event object may not contain a type variable, such as <T>.


We can assign qualifiers to an event and thus distinguish an event from other events of an event object type. These qualifiers act like selectors, narrowing the set of events that will be observed for an event object type.

There is no distinction between a qualifier of a bean type and that of an event, as they are both defined with @Qualifier. This commonality provides a distinct advantage when using qualifiers to distinguish between bean types, as those same qualifiers can be used to distinguish between events where those bean types are the event objects.

An event qualifier is shown here:

@Qualifier @Target( { FIELD, PARAMETER } ) @Retention( RUNTIME ) public @interface Removed {}

How do I listen for an event?

An event is consumed by an observer method , and we inform Weld that our method is used to observe an event by annotating a parameter of the method, the event parameter , with @Observes . The type of event parameter is the event type we want to observe, and we may specify qualifiers on the event parameter to narrow what events we want to observe.

We may have an observer method for all events produced about a Book event type, as follows:

public void onBookEvent(@Observes Book book) { ... }

Or we may choose to only observe when a Book is removed, as follows:

public void onBookRemoval(@Observes @Removed Book book) { ... }

Any additional parameters on an observer method are treated as injection points.

An observer method will receive an event to consume if:

  • The observer method is present on a bean that is enabled within our application
  • The event object is assignable to the event parameter type of the observer method


Please enter your comment!
Please enter your name here