我眼中的Spring

來源:互聯網
上載者:User
用Spring有一段時間了,最近在部門內部做個Spring的培訓,一個很自然的問題出現大腦之中,Spring好在哪?
我可以擺出許多廣告,但那不是我的感覺。於是,我向自己發問,要求一個屬於自己的答案
Dependency Injection
原來,它叫IoC。Martin Flower發話了,是個架構都有IoC,這不足以新生容器反轉的“如何錨定外掛程式的具體實現”,於是,它有了個新名字,Dependency Injection。
其實,它就是一種將調用者與被調用者分離的思想,Uncle Bob管它叫DIP(Dependency Inversion 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就意味著要在一棵樹上弔死。我們原來系統中很難測試的另一個原因就是在代碼中遍布HttpServletResponse,這使得我們的代碼只有放在Web容器中才能跑起來。
Rod Johnson在評價一個Web架構的優劣時,將是否依賴於Servlet API作為一個及其重要的標準。
依賴於特定API就意味著要依賴於特定的容器或是架構,就像Servlet一定要跑在Web Container裡,EJB一定要有AppServer一樣。
沒有了介面的壓力,使得我們應用可以完全脫離Spring運行。在系統開發期間,我不斷強調即便沒有Spring,我們的應用依然可以自行組裝來運行,給我這種底氣的理由就是Spring沒有侵略性的介面。另一個原因是當時我並沒有對把整個系統放到Spring上有十足的把握。^_^
消除Singleton
Singleton是二十三個經典的設計模式之一,不幸的是,到了J2EE的世界,由於classloader的原因,它幾乎成了一個經典的反模式。曾經在自己的代碼中大量運用Singleton,部署中遇到的問題加上太多的重複代碼,給我留下了一段不堪回首的經曆。
Spring的出現漂亮的解決這個問題,我只要在設定檔中配置一個bean,它預設行為就是Singleton,我不必再為反模式抓空心思,不必再為了Singleton編碼。
擇其善者而從之
不同於很多技術,Spring並不是一個“要麼全部,要麼沒有”的東西,它是一個分層的結構。我們可以從中選取我們感興趣的部分,而不必理會其它的部分。我用得最多的部分就是Spring的Core部分,也就是基於bean的組態架構,對於其上的MVC、ORM、DAO等等,我並不瞭解,但這絲毫不影響我的運用。
開闊視野
Spring本身包含很多的東西,從Dependency Injection之類思想性的東西,到現在頗為流行的AOP、ORM之類實現技術。在Spring的路線圖中,JMX、JMS、JCA等等已經都納入了Spring未來的發展計劃中。於我而言,沉浸於Spring的世界裡,一段時間內不愁沒東西可學。
Spring起源於Rod Johnson的《Expert One-on-One J2EE Design and Development》,所以,這本書成了Spring最好的輔導材料。書中的許多觀點的提出完全是基於Rod本人的實際經驗,比起不少假大空的理論或是廣告來得實際得多。Spring郵件清單中有人這樣評價,這本書值得“cover-to-cover”的讀。如果你和曾經的我一樣,迷失於J2EE紛繁複雜的世界中,這是一劑讓你清醒過來的良藥。
這就是我眼中的Spring,這些理由比之許多Spring的廣告顯得單薄許多,因為我對Spring的瞭解實在有限,但這足以讓我相信在Spring上花費時間是值得的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.