【发布时间】:2016-05-04 12:09:01
【问题描述】:
我正在尝试动态检索我的 Java 代码的依赖项。
我知道类名,但我想获取容器管理的实例,并解决适当的间接依赖关系。
例如:
class Foo {
public static void foo() {
Bar bar = (Bar) getDependency("com.example.Bar");
bar.bar();
}
}
class Bar {
@Inject
private Spam spam;
public void bar() {
spam.spam();
}
}
我自己无法构造Bar 实例,因为我无法注入正确的Spam。所以我希望Foo 向其中注入了Bar。我无法添加像 @Inject Bar bar 这样的字段,因为依赖项的确切名称在运行时会有所不同。
有什么办法吗?
我正在使用 WildFly 8.2.0。
【问题讨论】:
-
没错。类型不同。我将对所有这些都使用一个通用接口。问题是我需要运行时信息来知道要使用哪个“限定符”。我不能说静态使用哪个依赖项。
-
假设你有类
A和B和@MyImpl限定符有String值。您使用@MyImpl(value = "A")注释类A,B 也是如此。当您使用Instance接口时,您可以使用select方法来查找您的实现。如果您希望注入A类,您可以说:“给我带有@MyImpl限定符和“A”值的类对象”。然后将注入A类。 “A”值可能是在运行时变化的变量。 docs.jboss.org/weld/reference/latest/en-US/html/…
标签: java dependency-injection cdi wildfly-8 inject