2015-05-06 72 views
3

我有一個類,每個請求(dbSession在我的例子中)和其他一些使用每個請求對象的實例的類都應該創建(和銷燬)實例。就像這樣:作用域範圍傳播

webservice --> repository --> dao --> dbSession 

( - >裝置使用)

但後來我有一個類似的用例,但dbsession不應該被綁定到一個請求。像這樣:

webservice --> otherService --> repository --> dao --> dbSession 

當前dbSession類被綁定到請求。爲了實現另一個用例,db會話不能被請求綁定。我可以使用限定符來實現,但是我必須爲兩個範圍重複一堆(需要的)提供者方法。

所以,我正在尋找另一種解決方案。是否有可能傳播示波器?我的意思是,依賴注入的注入目標範圍的對象?

@request webservice --> @myScope otherService --> @myScope repository --> @myScope dao --> @myScope dbSession 

在該示例中,otherService的所有依賴關係應與otherService(對otherService的調用是異步)位於同一範圍內。

Guice是這樣的可能嗎?只是出於好奇:CDI可能嗎?

+0

看起來像機器人腿問題的情況:https://github.com/google/guice/wiki/FrequentlyAskedQuestions#how-do-i-build-two-similar-but-slightly-different-trees-of -objects –

回答

0

我的理解是否正確?

第一種情況:

@Request webservice --> @Singleton repository --> @Singleton dao --> @Request dbSession 

你在找什麼在第二種情況:

@request webservice --> @myScope/@Singleton otherService --> @myScope/@Singleton repository --> @myScope/@Singleton dao --> @myScope/@noscope_session_per_query dbSession 

我建議你到你的資料庫封裝到PrivateModuleexpose只有repositoryotherService接口。然後在兩個模塊dbSession(意思是EntityManager應該是?)提供者綁定在不同的範圍內。當您開始混合示波器時,不要忘記使用Provider<T>而不是直接注入。

第二種選擇是使用註釋爲dbSession/EntityManager提供程序綁定並注入適當的註釋。