2016-04-10 131 views
-1

我有一個名爲Class1的類。我不知道這樣的類的字段是什麼,但我知道 有這樣的類中的字段使用註解@Inject,巫婆意味着這樣的字段需要注入Object實例。我所知道的是該課程有一個默認控制器。我用 這樣控制器實例通過newInstance方法的類:Java EE CDI手動注入

Object class1Object = Class.forName("Class1").newInstance(); 

的問題是,有「的Class1」的依賴關係不被注入到對象實例字段和我明白,它作爲我完全正常手動實例化類。我需要注入的依賴關係,所以,我需要一個神奇的方法來做到這一點:

CDI.injectAllDependencies(class1Object); 

任何想法? 請不要指望我停止手動實例化類。我的情況需要這種方法。提前致謝。

+0

中所述。如果按照它的方式工作,則這可能是一個選項。它實例化「Class1」類並注入其所有依賴項。我對嗎? –

+0

有沒有程序註冊的方法,而不是beans.xml? –

回答

0

即使我不建議這樣做,您可以通過使用反射獲得與@Inject註釋的所有字段:

for (Field field : Class.forName("Class1").getFields()) { 
    if (field.isAnnotationPresent(Inject.class)) { 
     //do all your nasty stuff here 
    } 
} 

然後,如果您想從CDI就可以得到該字段的類型的實例向BeanManager詢問它。看看http://dominikdorn.com/2010/04/cdi-weld-manual-bean-lookup。在實例之後,您可以使用反射將字段設置爲實例,如Field API(https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Field.html#set-java.lang.Object-java.lang.Object-