【问题标题】:Java EE CDI Manual Injection [duplicate]Java EE CDI 手动注入 [重复]
【发布时间】:2016-04-10 08:48:45
【问题描述】:

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

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

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

CDI.injectAllDependencies(class1Object); 

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

【问题讨论】:

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

标签: jakarta-ee reflection cdi


【解决方案1】:

即使我不推荐,你也可以通过使用反射获得所有带有@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-) 中所述

【讨论】:

    猜你喜欢
    • 2014-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    • 2014-02-17
    相关资源
    最近更新 更多