Eine "steckbare" DAO-Schicht basiert normalerweise/immer auf einer Schnittstellen-DAO. Betrachten wir zum Beispiel eine ziemlich generische einfache:
public interface GenericDAO <T, K extends Serializable> {
List<T> getAll(Class<T> typeClass);
T findByKey(Class<T> typeClass, K id);
void update(T object);
void remove(T object);
void insert(T object);
}
(Das haben Sie in Morphias generisches DAO )
Dann können Sie mehrere generische DAO-Implementierungen entwickeln, in denen Sie verschiedene Felder finden (wiedergegeben in Konstruktorparametern, Settern und Gettern usw.). Nehmen wir einen JDBC-basierten an:
public class GenericDAOJDBCImpl<T, K extends Serializable> implements GenericDAO<T, K extends Serializable> {
private String db_url;
private Connection;
private PreparedStatement insert;
// etc.
}
Sobald das generische DAO (für einen konkreten Datenspeicher) implementiert ist, wäre es ein Kinderspiel, ein konkretes DAO zu erhalten:
public interface PersonDAO extends GenericDAO<Person, Long> {
}
und
public class PersonDAOJDBCImpl extends GenericDAOJDBCImpl<Person, Long> implements PersonDAO {
}
(Übrigens, was Sie in Morphias BasicDAO ist eine Implementierung des generischen DAO für MongoDB).
Die zweite Sache in der steckbaren Architektur ist die Auswahl der konkreten DAO-Implementierung. Ich würde Ihnen raten, Kapitel 2 von Apress:Pro Spring 2.5 zu lesen ("Putting Spring into "Hello World"), um nach und nach etwas über Fabriken und Dependency Injection zu lernen.