加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 00:57:04 所属栏目:Java 来源:网络整理
导读:使用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;} 显然,我有循环依赖.根据
使用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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读