這個問題將引用從my blog post我寫了一年前。動態CDI注入在運行時
雖然我使用自定義CDI限定符爲我的DAO,我想知道是否有一種方法動態注入DAO的。
我問的原因如下。現在我有3個CDI限定符,@HibernateDAO
(用於Hibernate會話注入類型DAO),@JPADAO
(用於JPA特定的DAO)和@JDBCDAO
(用於純粹的JDBCDAO)。這就要求我必須在每一個具體的實現和注入之後指定它。
@Inject @JPADAO
private CustomerDAO customerDAO;
有沒有更好的方法,可以讓我添加各種DAO的味道,而不必更改代碼,編譯和部署?
我想在我的項目的下一版本引進的MongoDB,我在想,如果我可以從@MongoDBDAO
和注射一樣,離開
@Inject @MongoDBDAO
private CustomerDAO customerDAO;
我知道CDI中的注入可以讓默認和交替注入。我希望其他開發人員可以使用其他子類的默認實現進行覆蓋,並且可以在不更改現有服務代碼的情況下注入它。
東西的這種效果:
@Inject @DAO
private CustomerDAO customerDAO;
哪裏@DAO
可以任何的任何味道(甚至第三方),並以某種方式映射@DAO
先找到替代DAO,如果沒有找到,使用默認的實現。
謝謝。
哦!此解決方案必須嚴格執行與最新(作爲當前寫作時間)Java EE CDI規範一起工作。使用的技術:
- RedHat JBoss Wildfly 8.2.0最終版(完全兼容Java EE 7)。
- Java 8.
- Java EE 7 API。
我不會downvote使用Spring框架的解決方案,因爲它可以幫助其他Spring開發人員。
你檢查了嗎? http://docs.oracle.com/javaee/7/tutorial/cdi-adv002.htm#GJSDF – assylias
哎,謝謝!我怎麼錯過了這個?讓我快速研究一下。 :-) –