尽管简单的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");
}
}
这里的问题是,它是非常多的复杂过程编写框架来支持这样的事情,由于到它的注释反射性质。因此,在我写下一个通用框架之前,我希望有人已经做到了。有没有人遇到过这样的事情?
1.我没有看到它比解耦接口更糟糕,当然也没有比我们现在(或应该)使用的AOP重框架更糟糕。 – skaffman 2008-10-07 16:13:31
2.我不明白。您的IDE将向您显示对注释的引用,就像向您展示对接口的引用一样。 – skaffman 2008-10-07 16:14:05
3.因为你在子类化过程中只能得到一个镜头,并且适配器使用它的方式很差。如果你已经被分类了,会怎么样?您或者需要接受命中并实现每个方法都是空的存根,或者引入一个委托对象来处理事件。 – skaffman 2008-10-07 16:14:53