【发布时间】:2015-06-29 17:23:37
【问题描述】:
为什么“实例”从不迭代任何实现?我错过了什么?
JBoss EAP 6.3.0.GA (AS 7.4.0.Final-redhat-19)
public interface Simple { }
public class SimpleA implements Simple { public SimpleA() { } }
public class SimpleB implements Simple { public SimpleB() { } }
public class SimpleUser {
@Inject @Any Instance<Simple> instance;
@PostConstruct public void init() {
for (final Simple simple : instance) {
System.out.println(simple);
}
}
}
【问题讨论】:
-
你的 jar/war 的
META-INF或WEB-INF目录中是否有beans.xml,它提供了 bean? JBoss 7.x/EAP 6.x 使用 CDI 1.0,所以所有的 bean 都为 CDI 挑选。 -
谢谢,我有一个,但它是空的。我认为没有必要让它工作。其他注入正在工作,例如 @EJB 没有在 beans.xml 中添加它们。我现在打印了一个实现,但不是两个。添加“@ Default”和“@ Alternative”不会改变任何事情。我想我错过了一些基本的东西。顺便说一句,如果有一个实现@Inject 也可以......
-
我在示例战争中尝试了您的代码并且它有效。上面的代码就OK了。
-
好的,谢谢,真奇怪。我终于让它工作了。也许我使用 DeltaSpike 并且有几个 EJB 和带有 RestEasy 的 Web 服务的事实干扰了这一点,但是在为每个实现创建生产者方法之后,我可以迭代实现。对我来说,这有点失败,因为您必须为每个实现提供一个方法... @Produces public SimpleA getSimpleA(@New final SimpleA simpleA) { return simpleA; }
-
通常,所有提到的组件都可以很好地协同工作。 DeltaSpike 有一个
@Veto注释来禁用某些 bean。 CDI bean 可以在 CDI 的可移植扩展中禁用。根据您的课程路径,可能有一些东西会否决您的 bean,但这不太可能。