虽然 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");
   }
}
这样做的问题在于,由于它具有注释反射性质,因此编写框架以支持此类事情的过程更加复杂。
所以,在我开始编写通用框架的道路之前,我希望有人已经做到了。有没有人遇到过这样的事情?