@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.