[英]HK2 Injection With Circular Dependency
我正在使用HK2作为依赖项注入框架。 我正在我的应用程序中实例化一个状态机。 因此,A <-> B是很有可能的,因为取决于输入,一个人可以从B过渡回A。
@Singleton
class StateManager extends SomeInterface{
@Inject
private B b;
@Inject
private A a;
}
@Singleton
class A extends State{
@Inject
private B b;
@Inject
private StateManager sm;
}
@Singleton
class B extends State{
@Inject
private A a;
@Inject
private StateManager sm;
}
我怎样才能实现这样的目标? 以上示例仅用于说明。 我的州比这更多。 我试图查看它是否重复,但是找不到可以处理的重复项。 当我尝试使用ServiceLocator.getService(StateManager.class)
获取此图时,出现循环依赖异常。 做这样的事情有什么好处?
您应该能够注入javax.inject.Provider<B>
。 从Javadoc
提供
T
实例。 通常由喷射器实现。 对于任何可以注入的T
类型,还可以注入Provider<T>
。 与直接注入T
相比,注入Provider<T>
使:
- 检索多个实例。
- 实例的惰性或可选检索。
- 打破循环依赖。
- 抽象作用域,以便您可以从包含作用域的实例中查找范围较小的实例。
然后在需要时调用get()
B b = bProvider.get();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.