Ich war auch Fan der GenericDao und GenericDaoImpl -Convention mit etwas Unterstützung von generischen Hilfsklassen sollte die speichern oder löschen erfordern zusätzliche Aktionen für einige persistente Klassen:
public interface PersistListener<T> {
void onPersist(T item);
}
Ähnliche Konstrukte können auch zum Löschen verwendet werden. Dies ist besonders nützlich, wenn Sie eine Art von Ereignisprotokoll zum Schreiben jeder Aktivität benötigen und AOP nicht dafür verwenden möchten.
Mein GenericDaoImpl würde wie folgt aussehen:
public class GenericDaoImpl<T> extends HibernateTemplate {
public void setPersistListeners(List<PersistListener> listeners) {
this.persistListeners = new GenericInterfaceHandler(listeners,
PersistListener.class);
}
// hibernate updates the key to the object itself
public T save(T item) {
getSession().save(item);
List<PersistListener<T>> listeners = this.persistListeners.getAll(item);
for (PersistListener<T> listener : listeners)
listener.persist(item);
}
// ...
}
Was die persistListener im obigen Beispiel eine PersistListener mit generischer Klasse Anpassung zu der der Klasse als Parameter angegeben finden tun sind. Ist dies der Fall, wird der Anruf an die richtigen Zuhörer delegiert. My GenericInterfaceHandler kann auch verwendet werden, um nur den spezifischsten Handler oder den einzigen Handler für die gegebene Klasse zurückzugeben, falls vorhanden.
Wenn Sie interessiert sind, könnte ich auch die GenericInterfaceHandler-Implementierung veröffentlichen, da es bei vielen Gelegenheiten recht leistungsfähig ist.
Danke! Wäre es auch sinnvoll, meine DAO-Schnittstellen in ein Dao-Paket und die Implementierung in ein dao.hibernate-Paket zu stellen (damit die Implementierung später getauscht werden kann)? – oym
Das macht Sinn – Kevin