Before & After
Observe events before or after they are dispatched
Pixie wraps every event dispatch in BeforeEvent<T> and AfterEvent<T> wrappers, allowing you to hook into the event lifecycle.
BeforeEvent
BeforeEvent<T> is fired before the actual event is dispatched to its observers:
public class SecurityCheck {
public void beforeOrder(@Observes final BeforeEvent<OrderProcessed> event) {
// Runs before any @Observes OrderProcessed methods
validatePermissions(event.getEvent());
}
}
AfterEvent
AfterEvent<T> is fired after all observers of the actual event have been called:
public class Metrics {
public void afterOrder(@Observes final AfterEvent<OrderProcessed> event) {
// Runs after all @Observes OrderProcessed methods
recordMetric("order.processed");
}
}
Execution Order
For a single event, the order is:
BeforeEvent<T>observersTobservers (the event itself)AfterEvent<T>observers
Type Matching
BeforeEvent and AfterEvent use the generic type argument for matching, so there are no false positives:
// Only fires before Integer events — not before Date events
public void beforeInt(@Observes final BeforeEvent<Integer> event) { ... }
// Only fires after Date events — not after Integer events
public void afterDate(@Observes final AfterEvent<Date> event) { ... }
Supertype matching works too — BeforeEvent<Number> will fire before any Integer, Long, or Double event. AfterEvent<Object> fires after every event.