<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 3, 文章 - 152, 評論 - 17, 引用 - 0
    數(shù)據(jù)加載中……

    我眼中的Spring

    用Spring有一段時間了,最近在部門內(nèi)部做個Spring的培訓,一個很自然的問題出現(xiàn)大腦
    之中,Spring好在哪?
    我可以擺出許多廣告,但那不是我的感覺。于是,我向自己發(fā)問,要求一個屬于自己的答

    Dependency Injection
    原來,它叫IoC。Martin Flower發(fā)話了,是個框架都有IoC,這不足以新生容器反轉的“如
    何定位插件的具體實現(xiàn)”,于是,它有了個新名字,Dependency Injection。
    其實,它就是一種將調(diào)用者與被調(diào)用者分離的思想,Uncle Bob管它叫DIP(Dependency I
    nversion Principle),并把它歸入OO設計原則。
    同Spring相比,它更早進入我的大腦。一切都是那么朦朧,直至Spring出現(xiàn)。
    慢慢的,我知道了它還分為Interface Injection(type 1),Setter Injection(type
    2),Constructor Injection(type 3)。Martin Flower那篇為它更名的大作讓我心目關
    于它的一切趨于完整。
    在Spring中,它是一切的基礎。Spring的種種優(yōu)勢隨之而來。
    于我而言,它為我?guī)砀嗟氖撬季S方式的轉變,恐怕以后我再也無法寫出那種一大塊的
    全功能程序了。
    動態(tài)配置
    這里提及的動態(tài)配置包括兩個部分:系統(tǒng)的生成和系統(tǒng)的修改。
    基于Spring的應用是依賴配置文件組織起來的,這意味著我們所編寫的程序,更多的是在
    完成具體的功能,而各個功能之間的串連,就要靠配置文件了。
    隨之而來的一個好處就是,我們可以在不重新編譯代碼的情況下,改變系統(tǒng)行為。
    或許不修改代碼可以成為另一個理由,但在我看來,修改Java代碼和修改配置文件沒有什
    么本質(zhì)區(qū)別,只要能把配置文件視為另一種語言,不是嗎?
    有位同事問我,Spring的配置文件的正確性是否只有運行時才能發(fā)現(xiàn),道理上講是這樣的
    。每次修改配置文件,然后跑起來確定其正確性,這確實是一件費力不討好的事。如果你
    是Eclipse的用戶,你就幸福多了,已經(jīng)有人開發(fā)了Spring的插件協(xié)助你完成這個工作。

    易測的結構
    曾經(jīng)有一次在現(xiàn)場,我改一個簡單的小bug,簡單到加在一起改的代碼不超過五行。但從我
    定位到錯誤到完全把bug修正,用了兩個多小時,這使得兩個同伴最后只能對我怒目而視。

    這其中固然有我自己糊涂的原因,代碼不可測也是很重要的一個原因。每次修改了一句話
    ,就要部署到應用服務器上,運行起來看結果。相信每個有在應用服務器上部署應用經(jīng)驗
    的人都知道那是多么漫長的過程。
    如果以前對我說,對于一個好的應用來說,可測試性也非常重要,我擺出一副非常不屑的
    態(tài)度,慘痛的教訓徹底的教育了我。
    Dependency Injection讓整個應用結構清楚了許多,我們可以針對每個具體的模塊進行單
    元測試,而不必像過去一樣,只有把整個應用部署到應用服務器上運行起來之后,才能測
    試。
    局部的穩(wěn)定帶來的是更多的信心,當系統(tǒng)一點點整合在一起,信心就越來越足。
    不存在的接口壓力
    項目組中的一個同事對我說,用Spring跟沒用一樣。原因是我們的代碼并沒有繼承Spring
    中的類,也沒有實現(xiàn)Spring中的接口。
    這恰好就是Spring的優(yōu)勢之一,這使得我們的應用不必困在Spring上。依賴于特定的API就
    意味著要在一棵樹上吊死。我們原來系統(tǒng)中很難測試的另一個原因就是在代碼中遍布Http
    ServletResponse,這使得我們的代碼只有放在Web容器中才能跑起來。
    Rod Johnson在評價一個Web框架的優(yōu)劣時,將是否依賴于Servlet API作為一個及其重要的
    標準。
    依賴于特定API就意味著要依賴于特定的容器或是框架,就像Servlet一定要跑在Web Cont
    ainer里,EJB一定要有AppServer一樣。
    沒有了接口的壓力,使得我們應用可以完全脫離Spring運行。在系統(tǒng)開發(fā)期間,我不斷強
    調(diào)即便沒有Spring,我們的應用依然可以自行組裝來運行,給我這種底氣的理由就是Spri
    ng沒有侵略性的接口。另一個原因是當時我并沒有對把整個系統(tǒng)放到Spring上有十足的把
    握。^_^
    消除Singleton
    Singleton是二十三個經(jīng)典的設計模式之一,不幸的是,到了J2EE的世界,由于classload
    er的原因,它幾乎成了一個經(jīng)典的反模式。曾經(jīng)在自己的代碼中大量運用Singleton,部署
    中遇到的問題加上太多的重復代碼,給我留下了一段不堪回首的經(jīng)歷。
    Spring的出現(xiàn)漂亮的解決這個問題,我只要在配置文件中配置一個bean,它缺省行為就是
    Singleton,我不必再為反模式抓空心思,不必再為了Singleton編碼。
    擇其善者而從之
    不同于很多技術,Spring并不是一個“要么全部,要么沒有”的東西,它是一個分層的結
    構。我們可以從中選取我們感興趣的部分,而不必理會其它的部分。我用得最多的部分就
    是Spring的Core部分,也就是基于bean的配置框架,對于其上的MVC、ORM、DAO等等,我并
    不了解,但這絲毫不影響我的運用。
    開闊視野
    Spring本身包含很多的東西,從Dependency Injection之類思想性的東西,到現(xiàn)在頗為流
    行的AOP、ORM之類實現(xiàn)技術。在Spring的路線圖中,JMX、JMS、JCA等等已經(jīng)都納入了Spr
    ing未來的發(fā)展計劃中。于我而言,沉浸于Spring的世界里,一段時間內(nèi)不愁沒東西可學。

    Spring起源于Rod Johnson的《Expert One-on-One J2EE Design and Development》,所
    以,這本書成了Spring最好的輔導材料。書中的許多觀點的提出完全是基于Rod本人的實際
    經(jīng)驗,比起不少假大空的理論或是廣告來得實際得多。Spring郵件列表中有人這樣評價,
    這本書值得“cover-to-cover”的讀。如果你和曾經(jīng)的我一樣,迷失于J2EE紛繁復雜的世
    界中,這是一劑讓你清醒過來的良藥。
    這就是我眼中的Spring,這些理由比之許多Spring的廣告顯得單薄許多,因為我對Spring
    的了解實在有限,但這足以讓我相信在Spring上花費時間是值得的。

    posted on 2005-03-05 18:40 閱讀(264) 評論(0)  編輯  收藏 所屬分類: J2ee

    主站蜘蛛池模板: 国产免费观看黄AV片| 亚洲国产精品无码专区| 亚洲成a人片在线观看中文app| 亚洲国产精品无码久久久秋霞2 | 成年免费a级毛片免费看无码| 免费国产在线观看| 猫咪免费观看人成网站在线| 黄 色一级 成 人网站免费| 亚洲国产综合精品中文字幕| 成人国产网站v片免费观看| 亚洲一区二区三区在线视频| 国产日韩AV免费无码一区二区三区| 久久国产成人亚洲精品影院| 国产一级高青免费| 亚洲人成网站影音先锋播放| 免费v片在线观看视频网站| 亚洲午夜久久久久久尤物| 大香人蕉免费视频75| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 中文字幕视频免费| 亚洲av产在线精品亚洲第一站| 成年女人喷潮毛片免费播放| 国产精品亚洲专区无码WEB| 免费女人18毛片a级毛片视频| 国产在线观看xxxx免费| 91在线精品亚洲一区二区| 桃子视频在线观看高清免费完整| 亚洲综合最新无码专区| 中文字幕无码一区二区免费| 亚洲理论片在线观看| 日本免费人成黄页网观看视频| 日本高清免费中文在线看| 亚洲AV无码久久精品蜜桃| 成年女人视频网站免费m| 免费人成再在线观看网站| 亚洲毛片在线观看| 日本免费一区二区三区最新 | 亚洲成a人片7777| 国产乱子伦精品免费女| 日本不卡免费新一区二区三区| 亚洲国产最大av|