seaairland

           

          學(xué)習(xí)spring的一些感悟

          1? 在spring開發(fā)指南中有這么一段話
          這里暫且拋開Spring Framework在設(shè)計上相當(dāng)出彩的表現(xiàn)不談。站在應(yīng)用開發(fā)的實(shí)際角度來說,
          其最大的優(yōu)勢在于:Spring是一個從實(shí)際項(xiàng)目開發(fā)經(jīng)驗(yàn)中抽取的,可高度重用的應(yīng)用框架。認(rèn)識到這
          一點(diǎn)非常重要。
          Spring Framework中目前最引人注目的,也就是名為控制反轉(zhuǎn)(IOC =Inverse Of Control)
          或者依賴注入(DI =Dependence Injection)的設(shè)計思想,這的確是相當(dāng)優(yōu)秀的設(shè)計理念,但是,
          光一個單純的設(shè)計模式并不能使得Spring如此成功,而Spring最成功的地方也并不僅僅在于采用了
          IOC/DI的設(shè)計。我們前面示例中的ActionFactory,勉強(qiáng)也可算做是一個IOC/DI設(shè)計的實(shí)現(xiàn),但又如
          何?
          可能相關(guān)技術(shù)媒體和不明就里的技術(shù)追隨者對于DI/IOC容器的過分炒作,在某種程度上誤導(dǎo)了初學(xué)
          者的視線。“控制反轉(zhuǎn)”,這顯然不是一個能望文知意的好名稱;“依賴注入”,也好不到哪里去,也正因
          為這樣,不少初學(xué)者都將Spring和生澀的所謂“控制反轉(zhuǎn)”和“依賴注入”看作一個懵懂的高級概念而
          供上了神龕。
          而實(shí)際上,Spring是筆者所見過的,最具實(shí)際意義的Java開發(fā)框架。它絕非一個高級概念玩具,而
          是一個切實(shí)的,能實(shí)實(shí)在在幫助我們改善系統(tǒng)設(shè)計的好幫手。
          首先,Spring涵蓋了應(yīng)用系統(tǒng)開發(fā)所涉及的大多數(shù)技術(shù)范疇,包括MVC、ORM以及Remote
          Interface等,這些技術(shù)往往貫穿了大多數(shù)應(yīng)用系統(tǒng)的開發(fā)過程。Spring從開發(fā)者的角度對這些技術(shù)內(nèi)
          容進(jìn)行了進(jìn)一步的封裝和抽象,使得應(yīng)用開發(fā)更為簡便。在筆者的開發(fā)工作中,借助Spring提供的豐富
          類庫,相對傳統(tǒng)開發(fā)模式,大大節(jié)省了編碼量(平均1/3強(qiáng),對于ORM和Remote層也許更多)。
          其次,Spring并非一個強(qiáng)制性框架,它提供了很多獨(dú)立的組件可供選擇。如筆者在一些項(xiàng)目中,就
          僅引用了Spring的ORM模板機(jī)制對數(shù)據(jù)存取層進(jìn)行處理,并取得了相當(dāng)理想的效果。
          評定一個框架是否優(yōu)良的條件固然有很多種,但是筆者始終認(rèn)為,對于應(yīng)用系統(tǒng)開發(fā)而言,我們面
          臨著來自諸多方面的壓力,此時,最能提高生產(chǎn)力的技術(shù),也就是最有價值的技術(shù)。很高興,Spring讓
          筆者找到了這樣的感覺。
          筆者對Rod Johnson最為欽佩的,并不是他用了IOC或者DI,而是他對J2EE應(yīng)用開發(fā)的透徹的理
          解。
          他真的明白開發(fā)人員需要什么。

          Type2和Type3型的依賴注入實(shí)現(xiàn)則是目前主流的IOC實(shí)現(xiàn)模式。這兩種實(shí)現(xiàn)方式各有特點(diǎn),也各具
          優(yōu)勢(一句經(jīng)典廢話J)。
          Type2 設(shè)值注入的優(yōu)勢
          1. 對于習(xí)慣了傳統(tǒng)JavaBean開發(fā)的程序員而言,通過setter方法設(shè)定依賴關(guān)系顯得更加直
          觀,更加自然。
          2. 如果依賴關(guān)系(或繼承關(guān)系)較為復(fù)雜,那么Type3模式的構(gòu)造函數(shù)也會相當(dāng)龐大(我們需
          要在構(gòu)造函數(shù)中設(shè)定所有依賴關(guān)系),此時Type2模式往往更為簡潔。
          3. 對于某些第三方類庫而言,可能要求我們的組件必須提供一個默認(rèn)的構(gòu)造函數(shù)(如Struts
          中的Action),此時Type3類型的依賴注入機(jī)制就體現(xiàn)出其局限性,難以完成我們期望的功
          能。
          Type3 構(gòu)造子注入的優(yōu)勢:
          1. “在構(gòu)造期即創(chuàng)建一個完整、合法的對象”,對于這條Java設(shè)計原則,Type3無疑是最好的
          響應(yīng)者。
          2. 避免了繁瑣的setter方法的編寫,所有依賴關(guān)系均在構(gòu)造函數(shù)中設(shè)定,依賴關(guān)系集中呈現(xiàn),
          更加易讀。
          3. 由于沒有setter方法,依賴關(guān)系在構(gòu)造時由容器一次性設(shè)定,因此組件在被創(chuàng)建之后即處于
          相對“不變”的穩(wěn)定狀態(tài),無需擔(dān)心上層代碼在調(diào)用過程中執(zhí)行setter方法對組件依賴關(guān)系
          產(chǎn)生破壞,特別是對于Singleton模式的組件而言,這可能對整個系統(tǒng)產(chǎn)生重大的影響。
          4. 同樣,由于關(guān)聯(lián)關(guān)系僅在構(gòu)造函數(shù)中表達(dá),只有組件創(chuàng)建者需要關(guān)心組件內(nèi)部的依賴關(guān)系。
          對調(diào)用者而言,組件中的依賴關(guān)系處于黑盒之中。對上層屏蔽不必要的信息,也為系統(tǒng)的
          層次清晰性提供了保證。
          5. 通過構(gòu)造子注入,意味著我們可以在構(gòu)造函數(shù)中決定依賴關(guān)系的注入順序,對于一個大量
          依賴外部服務(wù)的組件而言,依賴關(guān)系的獲得順序可能非常重要,比如某個依賴關(guān)系注入的
          先決條件是組件的DataSource及相關(guān)資源已經(jīng)被設(shè)定。

          posted on 2006-04-04 10:54 chenhui 閱讀(183) 評論(0)  編輯  收藏


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


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          介紹 IOC

          友情鏈接

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 海城市| 应城市| 武功县| 博野县| 潢川县| 蒙阴县| 宜兰市| 日喀则市| 沙雅县| 德庆县| 昂仁县| 涿州市| 通许县| 浦县| 南充市| 手机| 贵南县| 沿河| 双辽市| 扎赉特旗| 华宁县| 中山市| 安阳县| 信阳市| 兴城市| 宁蒗| 乐至县| 金沙县| 阜阳市| 汝南县| 通辽市| 垫江县| 玉山县| 台中县| 延津县| 香格里拉县| 乌鲁木齐县| 保靖县| 甘孜| 本溪市| 六安市|