Google guice

guice比sprin g是在裝載sprin g的集成入口,而且sprin

Google Guice (讀作"juice")是超輕量級的,下一代的,為Java 5及後續版本設計的依賴注入容器。
它在連線對象、訪問中間層等方面,體現了最大程度的靈活性和可維護性。

特性

Guice還具有一些可選的特性比如:自定義scopes,傳遞依賴,靜態屬性注入,與Spring集成和AOP聯盟方法注入等。  
一部分人認為,Guice可以完全替代spring, 因為對於DI組件框架來說, 性能是很重要的, guice比spring快十倍左右, 另外, 也是最重要的一點, 使用spring很容易寫成service locator的風格, 而用guice, 你會很自然的形成DI風格.  
甚至說,guice簡單超輕量級的DI框架效率是spring的100倍,Spring使用XML使用將類與類之間的關係隔離到xml中,由容器負責注入被調用的對象,而guice將類與類之間的關係隔離到Module中,聲名何處需要注入,由容器根據Module里的描述,注入被調用的對象,使用Annotation使用支持自定義Annotation標註,對於相同的接口定義的對象引用,為它們標註上不同的自定義Annotation注釋,就可以達到同一個類裡邊的同一個接口的引用,注射給不同的實現,在Module里用標註做區分,靈活性大大增加。  
運行效率裝載spring配置檔案時,需解析xml,效率低,getBean效率也不高,不過使用環境不會涉及到getBean,只有生產環境的時候會用到getBean,在裝載spring應用程式的時候,已經完成全部的注射,所以這個低效率的問題不是問題。使用Annotation,cglib,效率高與spring最明顯的一個區別,spring是在裝載spring配置檔案的時候把該注入的地方都注入完,而Guice呢,則是在使用的時候去注射,運行效率和靈活性高。類耦合度耦合度低,強調類非侵入,以外部化的方式處理依賴關係,類裡邊是很乾淨的,在配置檔案里做文章,對類的依賴性極低。高,代碼級的標註,DI標記@inject侵入代碼中,耦合到了類層面上來,何止侵入,簡直侵略,代碼耦合了過多guice的東西,大大背離了依賴注入的初衷,對於代碼的可維護性,可讀性均不利類編寫時需要編寫xml,配置Bean,配置注入只需聲明為@inject,等著被注入.僅支持IOC否,spring目前已經涉獵很多部分是,目前僅僅是個DI容器是否易於代碼重構統一的xml配置入口,更改容易配置工作是在Module里進行,和spring異曲同功支持多種注入方式構造器,setter方法Field,構造器,setter方法靈活性1,如果同一個接口定義的引用需要注入不同的實現,就要編寫不同的Module,煩瑣。  如果你想注射的一個實現,你還未知呢,怎么辦呢,spring是沒辦法,事先在配置檔案里寫死的,而Guice就可以做到,就是說我想注射的這個對象我還不知道注射給誰呢,是在運行時才能得到的的這個接口的實現,所以這就大大提高了依賴注射的靈活性,動態注射。  
與現有框架集成度高
  • 眾多現有優秀的框架(如struts1.x等)均提供了spring的集成入口,而且spring已經不僅僅是依賴注入,包括眾多方面。  
  • Spring也提供了對Hibernate等的集成,可大大簡化開發難度。  
  • 提供對於orm,rmi,webservice等等接口眾多,體系龐大。可以與現有框架集成,不過僅僅依靠一個效率稍高的DI,就想取代spring的地位,有點難度。配置複雜度在xml中定位類與類之間的關係,難度低代碼級定位類與類之間的關係,難度稍高。

  • 相關詞條

    熱門詞條

    聯絡我們