我正在基于通过CDI注入的DAO实现REST服务的基本CRUD。
它将使用多次注射,我想从扩展GenericRest
的类中传递DAO类型。
我按照本教程。
获得可行的代码:
GenericREST.java
public abstract class GenericREST {
@Inject
@DAOProducer
@DAOType(DAO.COMMENT)
private GenericDAO dao;
...
}
GenericDAO.java
public interface GenericDAO<T, PK extends Serializable> {
public T create(T t);
public T read(final PK id);
public T update(T t);
public void delete(final PK id);
}
当我如上所述设置@DAOType时,它运行良好。 但是我想通过从扩展类传递它的类型来某种程度地选择DAO。
有没有办法呢?或者可能有更简单的方法?
答案 0 :(得分:1)
假设您使用CDI实例,您可以执行以下操作:
@Inject
@DAOProducer
private Instance<GenericDAO<?,?>> genericDaoInst;
protected GenericDAO<?,?> getDao(DAO dao) {
return genericDaoInst.select(new DAOTypeLiteral(dao)).get();
}
然后在你的代码的某个地方...
GenericDAO<?,?> dao = getDao(DAO.COMMENT);