使用Wildfly 8.1我有几个bean,我尝试将几个EJB互相注入.可以说我有3个豆子:
@Stateless public class A{ @Inject private B b; } @Stateless public class B{ @Inject private C c; } @Stateless public class C{ @Inject private A a; }
显然,我有循环依赖.根据规格:
The container is required to support circularities in the bean
dependency graph where at least one bean participating in every
circular chain of dependencies has a normal scope
org.jboss.weld.exceptions.DeploymentException: WELD-001443: Pseudo scoped bean has circular dependencies. Dependency path:
-Session bean [class A with
qualifiers [@Default @Any]; local interfaces are
[A]
BackedAnnotatedField] @Inject private B,[..]
我的问题是:@Stateless bean的范围是什么?它默认是@Dependent吗?最重要的是我如何在无状态会话bean之间启用循环依赖?
对不起,如果这个问题太琐碎了.我会感谢任何好的进一步阅读资料,这将解释所呈现的行为.提前致谢.
更新
好.我找到了解决方法.我使用@EJB注释而不是@Inject,但这并不能解释@Inject的奇怪行为.这个问题仍未解决,但正如Mika所说,它在CDI规范和Weld RI中都可能是未解决的问题.
解决方法
这是wildfly / jboss CDI实现中的一个错误.问题描述
https://issues.jboss.org/browse/CDI-414中提供的当前解决方法(由@MikeBraun建议)是使用@EJB注释而不是@Inject.