Java CDI@Inject Instance@Any-但实例从未填充实例

Java CDI@Inject Instance@Any-但实例从未填充实例,java,jboss7.x,cdi,Java,Jboss7.x,Cdi,为什么“实例”从不迭代任何实现?我错过了什么 JBoss EAP 6.3.0.GA(AS 7.4.0.Final-redhat-19) 公共接口简单{} 公共类SimpleA实现简单{public SimpleA(){}} 公共类SimpleB实现简单{public SimpleB(){} 公共类SimpleUser{ @注入@任何实例; @构造后公共void init(){ for(最终简单:实例){ System.out.println(简单); } } } 如果它对其他人有帮助,我也在使用

为什么“实例”从不迭代任何实现?我错过了什么

JBoss EAP 6.3.0.GA(AS 7.4.0.Final-redhat-19)

公共接口简单{}
公共类SimpleA实现简单{public SimpleA(){}}
公共类SimpleB实现简单{public SimpleB(){}
公共类SimpleUser{
@注入@任何实例;
@构造后公共void init(){
for(最终简单:实例){
System.out.println(简单);
}
}
}

如果它对其他人有帮助,我也在使用Deltaspike 1.5.2,并且遇到了相同的问题(如果我删除了Deltaspike,我就不再有问题了)

在我的例子中,添加生产者方法并不能解决这个问题。环顾四周后,我发现这是一款可以解决问题但并不优雅的产品

我不得不打电话


列出myServiceList=BeanProvider.getContextualReferences(MyServiceInterface.class,false,false);


也许有更好的办法。我注意到Deltaspike在默认情况下启用了一系列扩展,但找不到关于如何禁用我未使用的扩展的文档,因为我怀疑可能是某个扩展导致了这个问题

在jar/war的
META-INF
WEB-INF
目录中是否有提供bean的
beans.xml
?JBoss 7.x/EAP 6.x使用CDI 1.0,所以所有的bean都是为CDI挑选的。谢谢,我有一个,但它是空的。不过,我认为没有必要让它工作。其他注入正在工作,比如@EJB,但没有将它们添加到beans.xml中。我现在有一个实现正在打印,但不是两个。添加“@Default”和“@Alternative”不会改变任何事情。我想我遗漏了一些基本的东西。顺便说一句,如果有一个实现@Inject也可以工作的话……我在一个示例war中尝试了你的代码,它工作了。上面的代码还可以。好的,谢谢,真奇怪。我终于让它工作了。也许我使用DeltaSpike并使用RestEasy拥有多个EJB和web服务的事实干扰了这一点,但是在为每个实现创建生产者方法之后,我可以迭代实现。对我来说,这是一种失败的观点,因为你必须为每个实现提供一个方法@生成公共SimpleA getSimpleA(@newfinal SimpleA SimpleA){return SimpleA;}通常,所有提到的组件都能很好地协同工作。DeltaSpike有一个
@invoint
注释来禁用某些bean。可以在CDI的可移植扩展中禁用CDIBean。根据您的类路径,可能会有一些东西否决您的bean,但这不太可能。DeltaSpike不会改变该区域的行为。这甚至是不可能的(如果没有对bean/s的否决权)。一些CDI容器只是在Inject+Any+实例的情况下有bug,但这与DeltaSpike无关。
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);
        }
    }
}