Ett "pluggbart" DAO-lager är vanligtvis/alltid baserat på ett gränssnitts-DAO. Låt oss till exempel överväga en ganska generisk enkel:
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);
}
(Det här är vad du har i Morphias generiska DAO )
Sedan kan du utveckla olika generiska DAO-implementationer, där du kan hitta olika fält (reflekteras i konstruktorparametrar, sättare och getters, etc). Låt oss anta en JDBC-baserad:
public class GenericDAOJDBCImpl<T, K extends Serializable> implements GenericDAO<T, K extends Serializable> {
private String db_url;
private Connection;
private PreparedStatement insert;
// etc.
}
När den generiska DAO har implementerats (för en konkret databutik), skulle det vara en no brainer att få en konkret DAO:
public interface PersonDAO extends GenericDAO<Person, Long> {
}
och
public class PersonDAOJDBCImpl extends GenericDAOJDBCImpl<Person, Long> implements PersonDAO {
}
(BTW, vad du har i Morphias BasicDAO är en implementering av den generiska DAO för MongoDB).
Det andra i den pluggbara arkitekturen är valet av den konkreta DAO-implementeringen. Jag skulle råda dig att läsa kapitel 2 från Apress:Pro Spring 2.5 ("Putting Spring into "Hello World") för att successivt lära sig om fabriker och beroendeinjektion.