@Retention(value=RUNTIME) @Target(value=METHOD) public @interface EventTopicSubscriber
This annotation simplifies much of the repetitive boilerplate used for subscribing to EventService Topics.
Instead of this:
public class MyAppController implements EventTopicSubscriber {
public MyAppController {
EventBus.subscribe("AppClosing", this);
}
public void onEvent(String topic, Object data) {
JComponent source = (JComponent)data;
//do something
}
}
You can do this:
public class MyAppController { //no interface necessary
public MyAppController {
AnnotationProcessor.process(this);//this line can be avoided with a compile-time tool or an Aspect
}
@EventTopicSubscriber{topic="AppClosingEvent"}
public void onAppClosing(String topic, Object data) {
//do something
}
}
That's pretty good, but when the controller does more, annotations are even nicer.
public class MyAppController implements EventTopicSubscriber {
public MyAppController {
EventBus.subscribe("AppStartingEvent", this);
EventBus.subscribe("AppClosingEvent", this);
}
public void onEvent(String topic, Object data) {
//wicked bad pattern, but we have to this
//...or create multiple subscriber classes and hold instances of them fields, which is even more verbose...
if ("AppStartingEvent".equals(topic)) {
onAppStartingEvent((JComponent)data);
} else ("AppClosingEvent".equals(topic)) {
onAppClosingEvent((JComponet)data);
}
}
public void onAppStartingEvent(JComponent requestor) {
//do something
}
public void onAppClosingEvent(JComponent requestor) {
//do something
}
}
Instead of all that, you can do this:
public class MyAppController {
public MyAppController {
AnnotationProcessor.process(this);//this line can be avoided with a compile-time tool or an Aspect
}
@EventTopicSubscriber{topic="AppStartingEvent"}
public void onAppStartingEvent(Object data) {
//do something
}
@EventTopicSubscriber{topic="AppClosingEvent"}
public void onAppClosingEvent(Foo data) {
//do something
}
}
Brief, clear, and easy.| Modifier and Type | Required Element and Description |
|---|---|
String |
topic
The topic to subscribe to
|
| Modifier and Type | Optional Element and Description |
|---|---|
Class<? extends EventService> |
autoCreateEventServiceClass
Whether or not to autocreate the event service if it doesn't exist on subscription, default is true.
|
String |
eventServiceName
The event service to subscribe to, default to the EventServiceLocator.SERVICE_NAME_EVENT_BUS.
|
int |
priority
Determines the order in which this subscriber is called, default is FIFO.
|
ReferenceStrength |
referenceStrength
Whether to subscribe weakly or strongly.
|
public abstract String topic
public abstract ReferenceStrength referenceStrength
public abstract String eventServiceName
public abstract int priority
public abstract Class<? extends EventService> autoCreateEventServiceClass
Copyright © 2013 Bushe Enterprises, Inc.. All Rights Reserved.