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中定位類與類之間的關係,難度低代碼級定位類與類之間的關係,難度稍高。
編輯本段2、spring與guice的區別
借斧子的例子說一說spring與guice的區別。
看下邊的例子:對於不一樣社會形態下一我的(java對象,調用者)須要一把斧子(java對象,被調用者)。
(1)原始社會時
勞動社會基本沒有分工,須要斧子的人(調用者)只好本身去磨一把斧子,每一個人擁有本身的斧子,若是把你們的石斧改成鐵斧,須要每一個人都要學會磨鐵斧的本領,工做效率極低。對應Java裏的情形是:java程序裏的調用者new一個被調用者的實例。類
耦合度極高,修改維護煩瑣,效率極低。
(2)工業社會時
工廠出現,斧子再也不由普通人完成,而由工廠生產,當人們須要斧子的時候,能夠到工廠購買斧子,無需關心斧子是怎麼製造出來的,若是廢棄鐵斧爲鋼斧,只需改變工廠的製造工藝便可,製做工藝是工廠決定的,工廠生產什麼斧子,工人們就得用什麼斧子。對應的java裏的情形是:Java程序的調用者能夠以來
簡單工廠建立被調用者,變化點被隔離到了簡單工廠裏,雖然
耦合度下降,可是調用者會和工廠耦合,並且須要定位本身的工廠
(3)近代工業社會
工廠蓬勃發展,人們須要什麼斧子,只須要提供一個斧子圖形,商家會按照你提供的圖形將你的斧子訂作好,送上門。對應Java裏的情形:spring的依賴注入
(4)按須要分配社會
信息進入現代化,人們再也不去工廠購買斧子,再也不拘泥於須要什麼斧子事先畫好什麼樣的圖形,只須要打個電話,描述一下須要什麼類型的斧子,或許想打造一個物美價廉的斧子,商家會根據市場零件的價格,計算出最優製做工藝,打造最適合的斧子送過來,更加信息化,更加人性化。對應Java裏的情形:基於描述的注入,動態的,靈活簡單的注入,如:Guice。對於該不應使用Guice,我想也是仁者見仁,智者見智,就象好多論壇裏動不動有人會在那裏討論到底學Java仍是學.net或者是使用eclipse仍是Jbuilder的這類無聊話題,適合和知足項目需求的,又能省工省力簡單的完成工做的,就是最好的。