2009-09-22 14 views

回答

37

使用Google Guice在單元測試中提供簡便性只有高級優勢。有些人甚至可能不在他們的項目中使用單元測試。人們一直在使用Spring/Dependency Injection,而不僅僅是單元測試。

使用谷歌吉斯水平低的優勢是凝聚力的應用程序中的事情,你的項目中的類可以被鬆耦合彼此之間。我可以爲另一個班級提供班級,而不需要彼此依賴。

考慮這個例子:

public class A{ 

} 

public class B{ 
    A a = new A(); 
} 

類B將被緊密地耦合到A類,或換句話說,它是依賴於類A的存在。

但隨着吉斯我可以代替使其鬆散地連接這樣的:

public class B{ 
    private A a; 

    @Inject 
    public B(A a){ 
     this.a = a; 
    } 
} 

類B現在是鬆散地耦合到A,和吉斯負責提供的,而不是乙具有初始化它實例。有了這個,你可以擴展它來提供A到B的接口,如果你想單元測試你的應用程序,實現可以是一個Mock對象。

說了這麼多我們只是討論至今依賴注入的好處。除了依賴注入,使用谷歌Guice的好處是:

  1. Guice有一個非常乾淨的構造函數Injection的實現。正如您從示例中看到的那樣,您只需添加@Injection註釋構造函數。
  2. Guice也使用相同的註解setter注入。
  3. 話雖如此,基於註釋的注入是非常乾淨的方法相比,基於XML的注入像一些其他的DI實現。
  4. 所有依賴注入和配置都使用Java,所以默認情況下,您可以保證在應用程序中獲得類型安全。
  5. Guice有一個非常輕量級的Aspect Oriented Programming(或者你可以稱之爲AOPAlliance AOP實現的包裝)。而且它的好處是它不會生成存根或什麼都不會。

這是它的概述。但是隨着你對Guice更深入的瞭解,關於它的事情還有很多。 A 簡單現實生活中的例子是,如果您使用的是GWT with MVP implementation,那麼GWT應用程序中的組件/小部件會非常鬆散地耦合在一起,並且不會彼此緊密集成。

4

我覺得優勢自帶編碼到接口,測試和代理。

編碼到一個接口有助於保持你的代碼分層得當,能夠注入嘲笑進行測試,並允許您生成代理自動地使客戶端代碼不用擔心實現。

這適用於吉斯,春,PicoContainer的,和所有的DI框架。

夠了嗎?

15

也許你應該回到過去,仔細觀察Guice想要解決的問題。爲了理解Guice背後的動機,TheServerSide.COM上的新聞(及其評論)是完美的起點。然後,繼續公告Google Guice, A Java Dependency Injection Framework(和評論)和Tech Talk: Bob Lee on Google Guice(和評論)。個人而言,我分享了關於邪惡XML的疑慮:XML配置地獄,XML和可能的運行時錯誤,容易出錯和重構的不利字符串標識符等等。實際上,我認爲對Spring和併發的懷疑論意見是對每個人都好(包括春天)。我很高興看到DI框架領域的新成員,特別是利用Java 5功能(爲了類型安全而使用泛型和註釋)的現代框架。因爲Google在關鍵任務應用程序中運行Guice(幾乎每個基於Java的應用程序也是基於Guice的應用程序:AdWords,谷歌文檔,Gmail甚至YouTube,如「Crazy」Bob Lee在Guice²),我不敢相信Guice是完全錯誤的,並沒有提供任何價值。可悲的是,我不認爲Google會提供這些應用程序的很多代碼作爲示例......但是您可能會在list of applications that use Guice和/或list of 3rd party Guice addons中找到有趣的東西。或者查看Guice²中提到的書籍。或者詢問Bob :)

+0

「重構 - 不利字符串標識符」究竟意味着什麼?你可以擴大一點嗎? – Geek 2014-07-31 18:17:09

相關問題