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

时间:2015-06-29 17:23:37

标签: java jboss7.x cdi

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

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);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

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

在我的情况下,添加生产者方法并没有解决它。看了看我的BeanProvider,它解决了这个问题,但远非优雅。

https://deltaspike.apache.org/documentation/core.html#BeanProvider

我不得不打电话

List<MyServiceInterface> myServiceList = BeanProvider.getContextualReferences(MyServiceInterface.class, false, false);

可能有更好的方法。我注意到默认情况下Deltaspike打开了一堆扩展,但无法找到关于如何禁用我没有使用的扩展的文档,因为我怀疑可能会导致此问题。