虽然 Java 中简单的、接口驱动的事件通知框架自寒武纪之前就已经存在(例如 java.beans.PropertyChangeSupport),但使用注释驱动的事件通知代替框架变得越来越流行。
例如,请参阅JBossCache 2.2。侦听器类对其侦听器方法进行了注释,而不是遵循严格的接口。这更容易编程,也更容易阅读,因为您不必编写您不感兴趣的侦听器回调的空实现(是的,我知道侦听器适配器超类)。
这是来自 JBossCache 文档的示例:
@CacheListener
public class MyListener {
@CacheStarted
@CacheStopped
public void cacheStartStopEvent(Event e) {
switch (e.getType()) {
case Event.Type.CACHE_STARTED:
System.out.println("Cache has started");
break;
case Event.Type.CACHE_STOPPED:
System.out.println("Cache has stopped");
break;
}
}
@NodeCreated
@NodeRemoved
@NodeVisited
@NodeModified
@NodeMoved
public void logNodeEvent(NodeEvent ne) {
log("An event on node " + ne.getFqn() + " has occured");
}
}
这样做的问题在于,由于它具有注释反射性质,因此编写框架以支持此类事情的过程更加复杂。
所以,在我开始编写通用框架的道路之前,我希望有人已经做到了。有没有人遇到过这样的事情?