„Wtyczkowa” warstwa DAO jest zwykle/zawsze oparta na interfejsie DAO. Rozważmy na przykład dość ogólny prosty:
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);
}
(To jest to, co masz w Ogólne DAO Morphii )
Następnie można opracować kilka różnych ogólnych implementacji DAO, w których można znaleźć różne pola (odzwierciedlające parametry konstruktora, settery i gettery itp.). Załóżmy, że oparty na JDBC:
public class GenericDAOJDBCImpl<T, K extends Serializable> implements GenericDAO<T, K extends Serializable> {
private String db_url;
private Connection;
private PreparedStatement insert;
// etc.
}
Po zaimplementowaniu ogólnego DAO (dla konkretnego magazynu danych), uzyskanie konkretnego DAO nie byłoby trudne:
public interface PersonDAO extends GenericDAO<Person, Long> {
}
i
public class PersonDAOJDBCImpl extends GenericDAOJDBCImpl<Person, Long> implements PersonDAO {
}
(Przy okazji, co masz w BasicDAO Morphii jest implementacją ogólnego DAO dla MongoDB).
Drugą rzeczą w architekturze pluggable jest wybór konkretnej implementacji DAO. Radziłbym przeczytać rozdział 2 z Apress:Pro Spring 2.5 („Putting Spring in „Hello World”), aby stopniowo uczyć się o fabrykach i wstrzykiwaniu zależności.