2016-07-19 39 views
4

我從來沒有使用java依賴注入功能,所以我讀了一些關於它的網頁,我仍然不清楚單例和依賴注入之間的決鬥。我們來看一個基本的例子:比方說,我使用MVC或MVVM模式來構建一個小的Java應用程序。我會從登錄頁面開始,請求用戶名和密碼。 這兩個信息可能在應用程序的稍後需要,所以我需要將它們存儲在一個簡單的POJO中,可以從應用程序的任何視圖訪問。Singleton vs Dependency Injection

那我該用什麼?單身?或者我應該@ @注入POJO的構造函數,並在需要時使用注入器來獲取它(與Guice一樣)?

感謝啓發我:)

+0

它不是 - 或者。 90%(99%?)的時間,它們都是:依賴注入的單身人士。 – Andreas

+0

@Andreas你能否詳細說明一下? – c0der

+0

安德烈亞斯的回答讓我有些不解:坦率地說:S – Xendar

回答

1

我會遠離POJO注入依賴項。在這種情況下,我會將我的ViewModel注入到提供/管理用戶的單例類型服務中。如果他們需要當前用戶,他們的注入服務爲他們提供當前相關的POJO實例。只要你的用戶管理服務被封裝在一個接口中,因此可以在不破壞功能的情況下被替換,我認爲這符合IoC。

這就是我已經接近類似的問題,我不確定這是做到這一點的最好方法。

+0

我確實瞭解這一點,並確實通過專門的服務來訪問信息,以確保方式。 所以如果我們有一個服務,我們在需要的地方注入服務實現,並且這個服務將從這個POJO(或其他任何地方)獲取用戶數據。但是,你如何使這個POJO「持久化」(不是物理上的,而是將它保存在應用程序內存中)。服務實現中的基本靜態實例?更整潔的東西? – Xendar

+0

不知道我明白這個問題,但服務實例是一個'singleton',因爲只有一個實例被注入,所以不需要靜態。在單個服務實例中只有一個「當前用戶」實例。由於服務是共享/單例 - 所有請求都會從同一服務實例傳遞相同的POJO。 – Joe

+0

再讀一遍我寫的,我覺得有點蠢。我想我需要休息一下!謝謝你試圖回覆愚蠢的小狗,雖然:) – Xendar

1

簡單的POJO不應該通過依賴注入注入。 它不應該是單身人士,因爲你需要爲每個請求創建一個新的實例。

依賴注入應該用來執行應用程序組件/服務/存儲庫/ beans /等的'連線'。它可以幫助您將應用程序模塊化,封裝在您的組件之間。還有更多..

單例是當你需要一些對象時,每個應用程序只有一個實例。它可以通過靜態實例和getInstance方法(如單例模式)以編程方式實現,也可以通過在Main類或上下文中僅創建1個實例來實現。在Spring中,除非另外配置,否則所有bean都將是單例,因爲上下文將只創建1個實例。

當你需要連接你的'單身人士'時,依賴注入將變得非常方便。

希望它已經足夠澄清。