我有一些DAO,如UserDAO, ProductDAO
等没有cdi注释或限定符(它们是@Default
)。这些类实现了抽象的DAO:从注入的实例中获取确切的对象CDI
public interface DAO {
void update();
void delete();
void getById(long id);
}
所以我收到的所有avaliable的DAO实现:
public class ClassToInjectIn {
@Inject
private Instance<DAO> allDAOs;
}
现在allDAOs
包含此:
[UserDAO, {@Default(), @Any()}]
[ProductDAO, {@Default(), @Any()}]
例如,我需要从的UserDAO这个例子,但我不能。 我想要做这样的方式:
UserDAO user = allDAOs.get();
但它抛出异常:在线程
异常“主” javax.enterprise.inject.AmbiguousResolutionException:太多豆 比赛,因为它们都具有相同的优先权。
所以问题是,我不能用大量预选赛,因为我有很多的实体,它们可以在以后添加。我需要一种通用方法,可以在上面的示例中查找并提取请求类型的对象。它不应该使用类名或任何字符串名来确定所需的类型或类。例如。 public DAO getNeededDAO(String neededClassName)
。它必须动态检测所需的类型/类别。有可能吗?
UPDATE
我需要的正是这一点:
UserDAO user = chooseAndGetRequiredDAO();
所以chooseAndGetRequiredDAO()
要明白,UserDAO的类型是必需的。它必须寻找存在的DAO并且如果发现则选择UserDAO。也许它应该使用反射或任何DAO工厂,我不确定。
我的天啊,它太简单了。谢谢。 – nllsdfx