Guava EventBus integration¶
Example of guicey-eventbus extension usage.
Example source code
The eventbus extension is used for:
- automatic listeners registration
- binding eventbus instance in guice context (for publication)
- printing available listeners to console
Configuration¶
An additional dependency is required:
implementation 'ru.vyarus.guicey:guicey-eventbus:5.1.0-2'
Note
guicey-eventbus version could be managed with BOM
Register eventbus bundle:
GuiceBundle.builder()
.bundles(new EventBusBundle())
Event¶
Events are simple POJOs. Create event classes with properties you need (or without everything):
public class FooEvent {
private String something;
public FooEvent(String something) {
this.something = something;
}
public void getSomething() {
return something;
}
}
Use event hierarchies, if appropriate:
public abstract class BaseEvent {}
public class FooEvent extends BaseEvent {}
public class BarEvent extends BaseEvent {}
For simplicity, properties are omitted.
Publication¶
Inject the eventbus instance to enable publication:
@Inject EventBus eventbus;
public void someAction() {
...
eventbus.post(new FooEvent());
}
Listening¶
Listener methods must be annotated with @Subscribe
and contain only one parameter of the target event type:
@Subscribe
public void onFooEvent(FooEvent event) {}
@Subscribe
// listen for all events of type (FooEvent, BarEvent)
public void onMultipleEvents(BaseEvent event) {}
Attention
Listener methods will only be registered for "known" guice beans. That means any extension or manually declared guice bean (using module) or bean created with guice AOT (because it's declared as dependency for other bean) will be searched for listener methods.