2015-04-06 161 views
0

對不起,本文對IoC和依賴注入有點困惑。我會給你舉個例子,但我很難實現。Java IoC和Guice - 依賴注入

假設我有一類用戶是這樣的:

public class User { 
    private String username; 
    private String password; 

    // getter and setter 
} 

這個類,應該在其他幾個控制器一起使用:

  • 的UI,其中用戶可以更改其密碼
  • 另一用戶可以提交一些「工作」的UI,並且此控制器需要訪問用戶名
  • 需要用戶的任務(線程或其他)

在這裏,我們只有一些例子,其中需要用戶,所以在第一個例子中,用戶是單身人士並且應該「活」在整個應用程序中。

在應用程序啓動(主)用戶將被加載,但只有一個這三個控制器將被創建。另一個組件將在應用程序運行時(以及某些事件發生時)創建。

一個簡單的方法可能是創建所有這三個組成以接受User對象和實施這樣:

public class FirstComponent { 
    private User user; 

    public FirstComponent(User user) { 
     this.user = user; 
    } 
} 

通過這種方式,我們需要經過用戶的設置來創建所有的組件,而不是當他們需要時。

一個更好的方法(我覺得...)可能是不注入用戶在此需要的所有類,而不被「obbligated」創建此組件的User創建後:

public class FirstComponent { 
    @Inject 
    private User user; 

    public FirstComponent() { 
     // do something 
    } 
} 

public class SecondComponent { 
    @Inject 
    private User user; 

    public SecondComponent(int anArg) { 
     // do something 
    } 
} 

我的問題是

  • 這可能是一個很好的解決方案,在大型應用程序中開發代碼,這不僅是一個只有其他3/4類的主類?
  • 如何做到這一點,並避免A類依賴於B類?

在應用中,可能存在許多類,如用戶,例如:

  • 具有預約列表的類 - >這將被共享屬於許多控制器

對不起如果我發佈了一個愚蠢的問題,但看在網上我發現了一些exaplain如何解決這個問題的例子。

我在看Guice,我已經開始使用它(很少),但問題沒有解決。

非常感謝您的幫助!

回答

1

一個簡單的方法可能是創建所有這三個組成接受的用戶對象,並以這種方式實現:

public class FirstComponent { 
    private User user; 

    public FirstComponent(User user) { 
    this.user = user; 
    } 
} 

通過這種方式,我們需要創建所有組件在用戶設置後,而不是在需要時。

這是不是真的。這種簡單的方法就是依賴注入的全部內容。關鍵是要選擇合適的範圍內爲您User對象。

基本上只要你創建一個類,你寫一個new地方添加你想創建作爲參數傳遞給構造函數的對象。一個例外是像ListArray容器。這樣所有的依賴關係都消失了。

問題是,你可能會得到大量的對象,並避免你可以創建Builder類來引導對象創建。

這種方式,創建過程是從類邏輯獨立的和的類將是單元測試方式更容易使用嘲笑對象。