Un livello DAO "collegabile" è solitamente/sempre basato su un'interfaccia DAO. Ad esempio, consideriamo un semplice abbastanza generico:
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);
}
(Questo è ciò che hai in DAO generico di Morphia )
Quindi puoi sviluppare diverse implementazioni DAO generiche, dove puoi trovare campi diversi (riflessi nei parametri del costruttore, setter e getter, ecc.). Assumiamo uno basato su JDBC:
public class GenericDAOJDBCImpl<T, K extends Serializable> implements GenericDAO<T, K extends Serializable> {
private String db_url;
private Connection;
private PreparedStatement insert;
// etc.
}
Una volta implementato il DAO generico (per un datastore concreto), ottenere un DAO concreto sarebbe un gioco da ragazzi:
public interface PersonDAO extends GenericDAO<Person, Long> {
}
e
public class PersonDAOJDBCImpl extends GenericDAOJDBCImpl<Person, Long> implements PersonDAO {
}
(A proposito, cosa hai in BasicDAO di Morphia è un'implementazione del DAO generico per MongoDB).
La seconda cosa nell'architettura pluggable è la selezione dell'implementazione DAO concreta. Ti consiglio di leggere il capitolo 2 di Apress:Pro Spring 2.5 ("Putting Spring into "Hello World") per conoscere progressivamente le fabbriche e l'iniezione di dipendenza.