0
這是,簡單地說,我的建築:如何使CDI決定的執行情況根據泛型類型的bean的使用
我想實現的是讓CDI注入的正確實施控制器內部的BO以及BO內的DAO的正確實現對應於控制器的通用類型。
我該如何做到這一點?
這是,簡單地說,我的建築:如何使CDI決定的執行情況根據泛型類型的bean的使用
我想實現的是讓CDI注入的正確實施控制器內部的BO以及BO內的DAO的正確實現對應於控制器的通用類型。
我該如何做到這一點?
我使用javax.enterprise.inject.Instance對象來封裝我的bo和dao,解決了這個問題。通過這種方式:
@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>{
}
我也宣告了替代BO的和DAO在beans.xml中:
<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在運行時,這非常好,因爲我不需要創建大量的樣板類。
您的_Generic_類是抽象的嗎?您的T類型是在子類還是其他地方解決? – 2014-11-03 17:30:45
只有GenericController.java是抽象的,因爲我需要在某些地方實例化bo和dao的泛型實現,所以它們不能抽象,我的T類型在控制器中解析並通過bo和dao傳播。 – 2014-11-03 18:22:13
無論如何,我找到了一個解決方案,我很快就會發布 – 2014-11-03 18:22:37