Estruturas de notificação de eventos genéricos e orientadas por anotações
Embora estruturas de notificação de eventos simples e orientadas à interface em Java existam desde os tempos pré-cambrianos (por exemplo, java.beans.PropertyChangeSupport), é cada vez mais popular que as estruturas usem a notificação de eventos orientada por anotações.
Por exemplo, vejaJBossCache 2.2. A classe de ouvinte tem seus métodos de ouvinte anotados, em vez de estar em conformidade com uma interface rígida. Isso é mais fácil de programar e mais fácil de ler, já que você não precisa escrever implementações vazias de callbacks de ouvintes nas quais não está interessado (e sim, eu sei sobre superclasses de adaptadores de ouvinte).
Aqui está um exemplo dos documentos do 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");
}
}
O problema com isto, é que é muito mais um processo envolvido escrevendo a estrutura para suportar esse tipo de coisa, devido à natureza de anotação-reflexão dela.
Então, antes de eu começar a escrever um framework genérico, eu esperava que alguém já tivesse feito isso. Alguém se deparou com uma coisa dessas?