jmc*_*n92 5 dependency-injection circular-dependency cdi jboss-weld
我在JBoss 7.1.1中遇到了CDI Injection进入Weld容器的问题
我有以下对象模型:
@Stateless
class ServiceEjb {
@Inject
A a;
}
class A {
@Inject
B b;
}
class B {
@Inject
A a;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试在我的无状态类中注入A或B时,注入循环并使用javax.enterprise.inject.CreationException崩溃.
我尝试了很多东西(范围,@ Singleton在A或B但没有成功).我不想打破代码,那些注射让人感觉到了.
任何线索将不胜感激.
Nic*_*ick 11
CDI标准不要求循环依赖注入,除非循环中至少有一个bean具有正常范围.最简单的解决方案是给A或B一个正常的范围.如果你不能给出正常范围(从代码模型开始,看起来它们都有默认的@Dependent伪范围),你将不得不寻找其他解决方案.发布真实的代码示例可能会让我们帮助您解决特定的解决方案,但这是一个开始:
@InjectC相互代替吗?以下是您可能会发现有用的其他解决方案的SO链接:
我通过显式使用javax.inject.Provider解决了该问题。虽然我觉得这应该由 WELD 在幕后自动完成,但对我来说情况并非如此。这对我有用并解决了我的相关问题。
class A {
@Inject
Provider<B> b; // access with b.get()
}
class B {
@Inject
Provider<A> a; // access with a.get()
}
Run Code Online (Sandbox Code Playgroud)
我还没有测试过它,但使用一个 Provider 来打破循环就足够了,即您不需要在两个类中都使用它。
| 归档时间: |
|
| 查看次数: |
5139 次 |
| 最近记录: |