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

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

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

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

    我眼中的Spring

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

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

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

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

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

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

    主站蜘蛛池模板: 国产成人在线观看免费网站| 一本岛高清v不卡免费一三区| 亚洲精品无码久久久久YW| 每天更新的免费av片在线观看| 国产无遮挡吃胸膜奶免费看视频| 亚洲夜夜欢A∨一区二区三区| 亚洲福利视频网站| 99在线观看精品免费99| 亚洲视频在线观看网站| 高潮毛片无遮挡高清免费| vvvv99日韩精品亚洲| 亚洲狠狠久久综合一区77777| 亚洲国产成人综合精品| 国产午夜无码精品免费看| 亚洲国产精品嫩草影院在线观看| 亚洲成AV人片高潮喷水| 午夜不卡久久精品无码免费 | 久久久久亚洲AV片无码下载蜜桃| 亚洲精品国产第一综合99久久 | 最近免费2019中文字幕大全| 久久青青草原亚洲av无码app| 日韩少妇内射免费播放| 亚洲人精品午夜射精日韩| 99爱视频99爱在线观看免费| 国产成人精品日本亚洲专区6| 久久伊人免费视频| 亚洲国产日韩视频观看| yy6080亚洲一级理论| 亚洲aⅴ天堂av天堂无码麻豆| 亚洲视频免费在线播放| 亚洲日韩精品无码专区| 亚洲精品456播放| 在线人成精品免费视频| 亚洲av网址在线观看| 精品国产免费人成电影在线观看| 亚洲国产精品无码一线岛国| 一区二区三区在线免费| 91亚洲导航深夜福利| 久久精品国产影库免费看| 亚洲国产成人久久| 亚洲爽爽一区二区三区|