【发布时间】:2017-01-18 09:27:47
【问题描述】:
我需要在我的应用程序中动态注入一组可变的类。目的是,随着应用程序的增长,只需要添加更多继承相同接口的类。这对于传统的 java 来说很容易做到,因为我只需要搜索包中的所有类并执行循环来实例化它们。我想在 CDI 中做到这一点。例如:
public MyValidatorInterface {
public boolean validate();
}
@Named
MyValidator1 implements MyValidatorInterface
...
@Named
MyValidator2 implements MyValidatorInterface
...
现在丑陋的非真实 java 代码只是为了了解我想要做什么:
public MyValidatorFactory {
for (String className: classNames) {
@Inject
MyValidatorInterface<className> myValidatorInstance;
myValidatorInstance.validate();
}
}
我想遍历 classNames 列表中的所有实现(顺便说一句,所有实现都在同一个包中)并动态注入它们,所以如果下周我添加一个新的验证器 MyValidator3,我只需编写新类并添加它到项目。 MyValidatorFactory 中的循环会找到它,注入它并在新类上执行 validate() 方法。
我已阅读有关动态注入的信息,但我找不到一种方法来循环一组类名并注入它们,就像我以前用旧方法实例化它们一样。
谢谢
【问题讨论】:
-
看看 CDI 中的
Instance,这就是你要找的:docs.jboss.org/cdi/api/1.0/javax/enterprise/inject/…。 -
感谢您的评论。这就是解决方案的方法。
标签: java dependency-injection cdi dynamic-loading