这就是我的架构:
我想要实现的是让CDI在Controller中注入BO的正确实现,并在BO内部正确实现DAO,同时支持Controller的泛型类型。
我怎样才能做到这一点?
答案 0 :(得分:1)
我使用javax.enterprise.inject.Instance对象解决了这个问题,以封装我的bo和dao's。这样:
@Inject
private Instance<CrudBO<T>> bo;
public CrudBO<T> getBo() {
return bo.get();
}
为了说清楚,CrudBO是GenericCrudBO实现的接口,因此, 知道默认情况下GenericCrudBO是用@Default注释的,我用@Alternative注释了专门的类:
@Alternative
public class SpecializedCrudBO extends GenericCrudBO<SpecificClass>{
}
我还在beans.xml中声明了替代方案BO&#39;和
<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
<alternatives>
<class>com.kichel.marcos.business.SpecializedCrudBO</class>
...
</alternatives>
</beans>
现在CDI可以在运行时处理我的通用java bean,这也非常好,因为我不需要创建大量的样板类。