2016-04-10 78 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-