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