cha*_*raj 1 java dependency-injection hk2
我使用 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;
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能实现这样的目标?上面的例子只是为了说明。我有比这更多的州。我试图看看它是否是重复的,但找不到一个可以处理的。当我尝试ServiceLocator.getService(StateManager.class)获取此图时,出现循环依赖异常。做这样的事情有什么好处呢?
您应该能够注射javax.inject.Provider<B>。来自 Javadoc
提供 的实例
T。通常由注入器实现。对于任何T可以注入的类型,您也可以注入Provider<T>。与直接注入相比T,注入Provider<T>可以:
- 检索多个实例。
- 实例的惰性或可选检索。
- 打破循环依赖。
- 抽象作用域,以便您可以从包含作用域中的实例查找较小作用域中的实例。
get()然后需要的时候打电话就可以了
B b = bProvider.get();
Run Code Online (Sandbox Code Playgroud)