Generische, durch Anmerkungen gesteuerte Ereignisbenachrichtigungs-Frameworks
Während einfache, schnittstellengesteuerte Ereignisbenachrichtigungs-Frameworks in Java seit vor der Zeit vor der Kambrienzeit existieren (z. B. java.beans.PropertyChangeSupport), wird es für Frameworks immer beliebter, stattdessen auf Anmerkungen basierende Ereignisbenachrichtigungen zu verwenden.
Ein Beispiel finden Sie unterJBossCache 2.2. Die Listener-Methoden der Listener-Klasse sind mit Anmerkungen versehen und entsprechen nicht einer starren Schnittstelle. Dies ist einfacher zu programmieren und leichter zu lesen, da Sie keine leeren Implementierungen von Listener-Rückrufen schreiben müssen, an denen Sie nicht interessiert sind (und ja, ich weiß über Listener-Adapter-Superklassen Bescheid).
Hier ist ein Beispiel aus den JBossCache-Dokumenten:
@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");
}
}
Das Problem dabei ist, dass das Schreiben des Frameworks zur Unterstützung dieser Art von Dingen aufgrund der Annotation-Reflection-Natur des Frameworks sehr viel komplizierter ist.
Bevor ich mich auf den Weg machte, ein generisches Framework zu schreiben, hoffte ich, dass jemand es bereits getan hatte. Ist jemand auf so etwas gestoßen?