java-ee – 为什么无状态bean被视为伪范围并且不能具有循环依赖性?

前端之家收集整理的这篇文章主要介绍了java-ee – 为什么无状态bean被视为伪范围并且不能具有循环依赖性?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
使用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.
原文链接:https://www.f2er.com/java/130164.html

猜你在找的Java相关文章