Jakarta ee JavaEECDI手动注入

Jakarta ee JavaEECDI手动注入,jakarta-ee,reflection,cdi,Jakarta Ee,Reflection,Cdi,我有一个班叫Class1。我也不知道这个类的字段是什么,但我知道 类中有使用注释@Inject的字段,这意味着 此类字段需要注入对象实例。我只知道这个类有一个默认的控制器。我用 此类控制器通过newInstance方法实例化类: Object class1Object = Class.forName("Class1").newInstance(); 问题是,“Class1”的依赖项没有被注入到对象实例字段中,我知道这是完全正常的,因为我正在手动实例化该类。我需要注入依赖项,因此,我需要一种神奇

我有一个班叫Class1。我也不知道这个类的字段是什么,但我知道 类中有使用注释@Inject的字段,这意味着 此类字段需要注入对象实例。我只知道这个类有一个默认的控制器。我用 此类控制器通过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索取。看一看。拥有实例后,您可以使用反射将字段设置为实例,如字段API()中所述。

No。如果它按照看起来的方式工作,这可能是一个选项。它实例化“Class1”类并注入其所有依赖项。我说得对吗?有没有办法通过编程而不是通过beans.xml注册它?