Annotation Interface EventSourcingHandler
@EventHandler
@Documented
@Retention(RUNTIME)
@Target({METHOD,ANNOTATION_TYPE})
public @interface EventSourcingHandler
Annotation that marks a method in: - an Aggregate (either the root, or an entity) as a handler for Events generated
by that aggregate. - a State model needed for
CommandHandler as
a handler for Events sourced in order to handle given CommandMessage. The
parameters of the annotated method are resolved using parameter resolvers.
Axon provides a number of parameter resolvers that allow you to use the following parameter types:- The first parameter is always the payload of the Event message, unless the
payloadTypeparameter is provided. In that case, the first parameter any other type of parameter described below. - Parameters annotated with
@MetadataValuewill resolve to the metadata value with the key as indicated on the annotation. If required is false (default), null is passed when the metadata value is not present. If required is true, the resolver will not match and prevent the method from being invoked when the metadata value is not present. - Parameters of type
Metadatawill have the entire metadata of an Event Message injected. - Parameters of type
Instantannotated withwill resolve to the timestamp of the EventMessage. This is the time at which the Event was generated.invalid reference
@Timestamp - Parameters assignable to
Messagewill have the entireEventMessageinjected (if the message is assignable to that parameter). If the first parameter is of type message, it effectively matches an Event of any type, even if generic parameters would suggest otherwise. Due to type erasure, Axon cannot detect what parameter is expected. In such case, it is best to declare a parameter of the payload type, followed by a parameter of type Message. - When using Spring and
<axon:annotation-config/>is declared, any other parameters will resolve to autowired beans, if exactly one autowire candidate is available in the application context. This allows you to inject resources directly into@EventSourcingHandlerannotated methods.
- First, the event handler methods of the actual class (at runtime) are searched
- If a method is found with a parameter that the domain event can be assigned to, it is marked as eligible
- After a class has been evaluated (but before any super class), the most specific event handler method is called. That means that if an event handler for a class A and one for a class B are eligible, and B is a subclass of A, then the method with a parameter of type B will be chosen
- If no method is found in the actual class, its super class is evaluated.
- If still no method is found, the event listener ignores the event
Object.
Note: if there are two event handler methods accepting the same argument, the behavior is undefined.- Since:
- 2.1.0
- Author:
- Allard Buijze
-
Optional Element Summary
Optional Elements
-
Element Details
-
payloadType
Class<?> payloadTypeThe type of event this method handles. If specified, this handler will only be invoked for message that have a payload assignable to the given payload type.Optional. If unspecified, the first parameter of the method defines the type of supported event.
- Returns:
- The type of the event this method handles.
- Default:
java.lang.Object.class
-