簡體   English   中英

具有循環依賴的HK2注射

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM