posts - 14,  comments - 8,  trackbacks - 0
          ???????? 最近,買了本Spring入門書:spring In Action 。大致瀏覽了下感覺還不錯(cuò)。就是入門了點(diǎn)。Manning的書還是不錯(cuò)的,我雖然不像哪些只看Manning書的人那樣專注于Manning,但懷著崇敬的心情和激情通覽了一遍。又一次接受了IOC 、DI、AOP等Spring核心概念。 先就IOC和DI談一點(diǎn)我的看法。

          IOC(DI):其實(shí)這個(gè)Spring架構(gòu)核心的概念沒有這么復(fù)雜,更不像有些書上描述的那樣晦澀。java程序員都知道:java程序中的每個(gè)業(yè)務(wù)邏輯至少需要兩個(gè)或以上的對(duì)象來(lái)協(xié)作完成,通常,每個(gè)對(duì)象在使用他的合作對(duì)象時(shí),自己均要使用像new object() 這樣的語(yǔ)法來(lái)完成合作對(duì)象的申請(qǐng)工作。你會(huì)發(fā)現(xiàn):對(duì)象間的耦合度高了。而IOC的思想是:Spring容器來(lái)實(shí)現(xiàn)這些相互依賴對(duì)象的創(chuàng)建、協(xié)調(diào)工作。對(duì)象只需要關(guān)系業(yè)務(wù)邏輯本身就可以了。從這方面來(lái)說,對(duì)象如何得到他的協(xié)作對(duì)象的責(zé)任被反轉(zhuǎn)了(IOC、DI)。

          這是我對(duì)Spring的IOC的體會(huì)。DI其實(shí)就是IOC的另外一種說法。DI是由Martin Fowler 在2004年初的一篇論文中首次提出的。他總結(jié):控制的什么被反轉(zhuǎn)了?就是:獲得依賴對(duì)象的方式反轉(zhuǎn)了。

          如果對(duì)這一核心概念還不理解:這里引用一個(gè)叫Bromonblog上找到的淺顯易懂的答案:



          IoCDI

            首先想說說IoCInversion of Control,控制倒轉(zhuǎn))。這是spring的核心,貫穿始終。所謂IoC,對(duì)于spring框架來(lái)說,就是由spring來(lái)負(fù)責(zé)控制對(duì)象的生命周期和對(duì)象間的關(guān)系。這是什么意思呢,舉個(gè)簡(jiǎn)單的例子,我們是如何找女朋友的?常見的情況是,我們到處去看哪里有長(zhǎng)得漂亮身材又好的mm,然后打聽她們的興趣愛好、qq號(hào)、電話號(hào)、ip號(hào)、iq號(hào)………,想辦法認(rèn)識(shí)她們,投其所好送其所要,然后嘿嘿……這個(gè)過程是復(fù)雜深?yuàn)W的,我們必須自己設(shè)計(jì)和面對(duì)每個(gè)環(huán)節(jié)。傳統(tǒng)的程序開發(fā)也是如此,在一個(gè)對(duì)象中,如果要使用另外的對(duì)象,就必須得到它(自己new一個(gè),或者從JNDI中查詢一個(gè)),使用完之后還要將對(duì)象銷毀(比Connection等),對(duì)象始終會(huì)和其他的接口或類藕合起來(lái)。

            那么IoC是如何做的呢?有點(diǎn)像通過婚介找女朋友,在我和女朋友之間引入了一個(gè)第三者:婚姻介紹所。婚介管理了很多男男女女的資料,我可以向婚介提出一個(gè)列表,告訴它我想找個(gè)什么樣的女朋友,比如長(zhǎng)得像李嘉欣,身材像林熙雷,唱歌像周杰倫,速度像卡洛斯,技術(shù)像齊達(dá)內(nèi)之類的,然后婚介就會(huì)按照我們的要求,提供一個(gè)mm,我們只需要去和她談戀愛、結(jié)婚就行了。簡(jiǎn)單明了,如果婚介給我們的人選不符合要求,我們就會(huì)拋出異常。整個(gè)過程不再由我自己控制,而是有婚介這樣一個(gè)類似容器的機(jī)構(gòu)來(lái)控制。Spring所倡導(dǎo)的開發(fā)方式就是如此,所有的類都會(huì)在spring容器中登記,告訴spring你是個(gè)什么東西,你需要什么東西,然后spring會(huì)在系統(tǒng)運(yùn)行到適當(dāng)?shù)臅r(shí)候,把你要的東西主動(dòng)給你,同時(shí)也把你交給其他需要你的東西。所有的類的創(chuàng)建、銷毀都由 spring來(lái)控制,也就是說控制對(duì)象生存周期的不再是引用它的對(duì)象,而是spring。對(duì)于某個(gè)具體的對(duì)象而言,以前是它控制其他對(duì)象,現(xiàn)在是所有對(duì)象都被spring控制,所以這叫控制反轉(zhuǎn)。如果你還不明白的話,我決定放棄。

          IoC的一個(gè)重點(diǎn)是在系統(tǒng)運(yùn)行中,動(dòng)態(tài)的向某個(gè)對(duì)象提供它所需要的其他對(duì)象。這一點(diǎn)是通過DIDependency Injection,依賴注入)來(lái)實(shí)現(xiàn)的。比如對(duì)象A需要操作數(shù)據(jù)庫(kù),以前我們總是要在A中自己編寫代碼來(lái)獲得一個(gè)Connection對(duì)象,有了 spring我們就只需要告訴springA中需要一個(gè)Connection,至于這個(gè)Connection怎么構(gòu)造,何時(shí)構(gòu)造,A不需要知道。在系統(tǒng)運(yùn)行時(shí),spring會(huì)在適當(dāng)?shù)臅r(shí)候制造一個(gè)Connection,然后像打針一樣,注射到A當(dāng)中,這樣就完成了對(duì)各個(gè)對(duì)象之間關(guān)系的控制。A需要依賴 Connection才能正常運(yùn)行,而這個(gè)Connection是由spring注入到A中的,依賴注入的名字就這么來(lái)的。那么DI是如何實(shí)現(xiàn)的呢? Java 1.3之后一個(gè)重要特征是反射(reflection),它允許程序在運(yùn)行的時(shí)候動(dòng)態(tài)的生成對(duì)象、執(zhí)行對(duì)象的方法、改變對(duì)象的屬性,spring就是通過反射來(lái)實(shí)現(xiàn)注入的。關(guān)于反射的相關(guān)資料請(qǐng)查閱java doc


          如果還不明白,放棄java吧!



          posted on 2006-04-12 10:34 虎嘯龍吟 閱讀(886) 評(píng)論(5)  編輯  收藏

          FeedBack:
          # re: 最近買了Spring in Action 中文版。
          2006-05-17 13:29 | Bruce.Chen
          寫的不錯(cuò),希望繼續(xù)努力!  回復(fù)  更多評(píng)論
            
          # re: 最近買了Spring in Action 中文版。
          2006-08-19 01:35 | 虎嘯龍吟
          # re: 最近買了Spring in Action 中文版。
          2006-12-01 09:06 | roger[匿名]
          good,通俗易懂!辛苦了!  回復(fù)  更多評(píng)論
            
          # re: 最近買了Spring in Action 中文版。
          2007-03-15 14:09 | 壞男孩
          這本書我也買了  回復(fù)  更多評(píng)論
            
          # re: 最近買了Spring in Action 中文版。
          2007-03-29 16:01 | Jedliu
          后面的例子引用的不錯(cuò),雖然不是很懂,所以還要繼續(xù)努力  回復(fù)  更多評(píng)論
            

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2007年3月>
          25262728123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章檔案

          相冊(cè)

          友情鏈接

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 德令哈市| 罗定市| 丰城市| 镇巴县| 肇州县| 唐山市| 泰来县| 皋兰县| 寻甸| 银川市| 玛多县| 内丘县| 孝义市| 天气| 凉城县| 洛浦县| 三亚市| 长沙县| 庆安县| 乌兰县| 麻栗坡县| 中方县| 河南省| 徐水县| 新丰县| 虹口区| 什邡市| 定襄县| 隆安县| 东乡族自治县| 新疆| 武冈市| 米脂县| 涿州市| 夏津县| 安化县| 华宁县| 工布江达县| 上犹县| 莆田市| 平潭县|