我對Guice比較陌生,所以這可能是一個基本的問題。它看起來像Guice可以選擇require explicit bindings。需要顯式綁定有沒有明顯的優勢?有沒有人經常在實踐中使用這個選項?Guice設計模式:需要顯式綁定的優點?
3
A
回答
4
我們在實踐中使用這個選項。我們只使用Guice將我們的應用程序連接在一起,而不是用於任何類型的按請求對象構造。因此,我們的大多數綁定都在Singleton範圍內 - 例如,我們希望我們的業務邏輯和統計接口都可以使用同一個持久層對象。
如果沒有明確的綁定,Guice將嘗試使用JIT綁定來滿足注入點。該綁定將在「無範圍」範圍內完成,該範圍爲每個注入點提供新的對象實例。這幾乎從來沒有我們想要的,並導致奇怪的運行時錯誤。強制顯式綁定迫使人們考慮並枚舉每個綁定的範圍。
2
我最近坐了一個1小時的調試會話,因爲我們沒有使用這個配置。問題在於,當我預期單身人士時,會創建多個實例。強制顯式綁定是一個很好的提示,可以考慮它是否應該是單例。
+0
如果解釋了* how * the,這個答案會更有用。不使用此配置導致難以追蹤的錯誤;你有什麼「容易犯的錯誤」? – ruakh
0
我也花了幾個小時來調試。原因是我忘了將具體類的綁定添加到單例作用域。爲了始終有明確的綁定,我使用了How do you prevent Guice from injecting a class not bound in the Module?(不是當前選擇的)的一個答案:binder().requireExplicitBindings();
(在AbstractModule的配置方法中)。
相關問題
- 1. MapBinder需要顯式綁定 - Guice 4.0 beta4
- 2. 需要模式建議(Hibernate + Guice)
- 3. 圖節點優先級設計模式
- 4. 需要c#設計模式的建議
- 5. 需要說明 - 設計模式
- 6. 工廠設計模式(需要批判)
- 7. 需要Prototype設計模式嗎?
- 8. 我需要一個設計模式嗎?
- 9. 優化查詢的Dynamodb模式設計
- 10. 需要優秀的設計模式來緩存數據庫查詢結果集
- 11. 使用哪種設計模式(我需要類似中介模式的東西)?
- 12. 使用MVC設計模式的優點和缺點(模型視圖控制器)
- 13. 是否需要指定綁定模式datatrigger
- 14. 如何定義關於MVC設計模式的綁定?
- 15. 設計模式定義
- 16. DbExpression綁定需要輸入表達式
- 17. 下面的場景需要遵循的設計模式
- 18. Android中的綁定器設計模式 - 代理,調解器和橋接模式?
- 19. 在Google Guice中顯式提供程序綁定
- 20. 設計模式真的有多重要?
- 21. JavaScript設計模式 - 處理不需要的異步
- 22. 需要選擇設計模式的幫助
- 23. 需要一些數據庫模式設計的建議
- 24. 設計我的第一個數據庫模式:需要建議
- 25. 我需要在我的設計中訪問者模式
- 26. 需要一些類似訪問者的設計模式
- 27. 當不需要UI時的設計模式
- 28. 這是我需要完成的正確模式設計嗎?
- 29. 需要設計模式 - 對多個可互換的庫門面
- 30. 需要iPhone網絡連接的設計模式/示例鏈接
新的requireAtInjectOnConstructors()方法是更有用的恕我直言。請參閱https://code.google.com/p/google-guice/source/browse/core/src/com/google/inject/Binder.java#485 – NamshubWriter