再借斧子的例子說一說spring與guice的區別
看下邊對於不同社會形態下一個人(java物件,呼叫者)需要一把斧子(java物件,被呼叫者)的例子:
(1),原始社會時,勞動社會基本沒有分工,需要斧子的人(呼叫者)只好自己去磨一把斧子,每個人擁有自己的斧子,如果把大家的石斧改為鐵斧,需要每個人都要學會磨鐵斧的本領,工作效率極低。
對應Java裡的情形是:java程式裡的呼叫者new一個被呼叫者的例項。類耦合度極高,修改維護煩瑣,效率極低。
(2),工業社會時,工廠出現,斧子不再由普通人完成,而由工廠生產,當人們需要斧子的時候,可以到工廠購買斧子,無需關心斧子是怎麼製造出來的,如果廢棄鐵斧為鋼斧,只需改變工廠的製造工藝即可,製作工藝是工廠決定的,工廠生產什麼斧子,工人們就得用什麼斧子。
對應的Java裡的情形是:Java程式的呼叫者可以以來簡單工廠建立被呼叫者,變化點被隔離到了簡單工廠裡,雖然耦合度降低,但是呼叫者會和工廠耦合,而且需要定位自己的工廠。
(3)近代工業社會,工廠蓬勃發展,人們需要什麼斧子,只需要提供一個斧子圖形,商家會按照你提供的圖形將你的斧子訂做好,送上門。
對應Java裡的情形:spring的依賴注入
(4)進入按需要分配社會,資訊進入現代化,人們不再去工廠購買斧子,不再拘泥於需要什麼斧子事先畫好什麼樣的圖形,只需要打個電話,描述一下需要什麼型別的斧子,或許想打造一個物美價廉的斧子,商家會根據市場零件的價格,計算出最優製作工藝,打造最適合的斧子送過來,更加資訊化,更加人性化。
對應Java裡的情形:基於描述的注入,動態的,靈活簡單的注入,如:Guice。
對於該不該使用Guice,我想也是仁者見仁,智者見智,就象好多論壇裡動不動有人會在那裡討論到底學Java還是學.net或者是使用eclipse還是Jbuilder的這類無聊話題,適合和滿足專案需求的,又能省工省力簡單的完成工作的,就是最好的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13270562/viewspace-211680/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 說說 HTTP1.0/1.1/2.0 的區別?HTTP
- 從 Number.isNaN 與 isNaN 的區別說起NaN
- 騰訊一面!說說ArrayList的遍歷foreach與iterator時remove的區別,我一臉懵逼REM
- (12)非阻塞賦值與阻塞賦值區別(以簡單例子說明)賦值單例
- 請說說`<script>`、`<script async>`和`<script defer>`的區別
- 一句話說明白C#中的new與override的區別C#IDE
- 說說你對分而治之、動態規劃的理解?區別?動態規劃
- 說說常見的排序演算法有哪些?區別?排序演算法
- 面試官:兄弟,說說基本型別和包裝型別的區別吧面試型別
- 說說bind、call、apply的區別?並手寫實現一個bind的方法APP
- 說說你對資料結構的理解?有哪些?區別?資料結構
- 說說Loader和Plugin的區別?編寫Loader,Plugin的思路?Plugin
- override 與 overload 的區別+例子IDE
- 說說JavaScript的型別轉換JavaScript型別
- 說說 Spring DAO 的異常體系Spring
- 一文說通Jwt、Session、Cooike區別JWTSession
- 細說紛紜——Redis 和 Memcached 的區別Redis
- 美團一面:說一說Java中的四種引用型別?Java型別
- 說說 Spring 表示式語言(SpEL)中的各種表示式型別Spring型別
- Http與Https的區別(精簡版包含協議說明)HTTP協議
- CXP 協議中upconnection 與downconnection的說明及其區別協議
- 請你說說SpringSpring
- 說說Mongodb 與 MySQL的那些事MongoDBMySql
- 說說 Spring AOP 中 @Aspect 的高階用法Spring
- 說說 Spring 支援的 AspectJ 切點函式Spring函式
- 【Java面試】說說你對Spring MVC的理解Java面試SpringMVC
- 自導自演的面試現場:說說char 和 varchar的區別你瞭解多少?面試
- SpringMvc的xml配置與annotation配置的例子的區別SpringMVCXML
- 細說new和malloc的十大區別
- 說說 Vue.js 的指令與事件Vue.js事件
- Spring Security實戰三:說說我的認識Spring
- 無線路由器說說2.4G和5GWi-Fi的區別路由器
- 嘗試說一說事件的使用事件
- 說一說 Facebook 開源的 Litho
- spring中的IOC說明Spring
- 細說Python2.x與3.x版本區別Python
- 《細說PHP》中strlen和mb_strlen的區別PHP
- 細說PHP中strlen和mb_strlen的區別PHP