Java EE CDI手动注入



我有一个名为Class1的类。我也不知道这门课的领域是什么,但我知道此类中有使用注释@Inject的字段,witch意味着这样的字段需要注入Object实例。我所知道的是这个类有一个默认控制器。我使用这样的控制器通过newInstance方法实例化类:

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

问题是,"Class1"的依赖项没有注入到对象实例字段中,我理解这是完全正常的,因为我正在手动实例化类。我需要注入依赖项,所以,我需要一个神奇的方法来做到这一点:

CDI.injectAllDependencies(class1Object); 

有什么想法吗?请不要期望我停止手动实例化类。我的处境需要这样的方法。提前谢谢。

即使我不推荐,您也可以通过使用反射来获得用@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-)

最新更新