|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: REQUIRED | OPTIONAL | DETAIL: ELEMENT | |||||||||
@Retention(value=RUNTIME) @Target(value=METHOD) public @interface EventTopicSubscriber
An Annotation for subscribing to EventService Topics.
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.
| Required Element Summary | |
|---|---|
java.lang.String |
topic
The topic to subscribe to |
| Optional Element Summary | |
|---|---|
java.lang.Class<? extends EventService> |
autoCreateEventServiceClass
Whether or not to autocreate the event service if it doesn't exist on subscription, default is true. |
java.lang.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. |
| Element Detail |
|---|
public abstract java.lang.String topic
public abstract ReferenceStrength referenceStrength
public abstract java.lang.String eventServiceName
public abstract int priority
public abstract java.lang.Class<? extends EventService> autoCreateEventServiceClass
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: REQUIRED | OPTIONAL | DETAIL: ELEMENT | |||||||||