[英]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.