爲何須要Spring
你可能正在想「Spring不過是另一個的framework」。當已經有許多開放源代碼(和專有) J2EE framework時,咱們爲何還須要Spring Framework?
Spring是獨特的,由於若干個緣由:
◆它定位的領域是許多其餘流行的framework沒有的。Spring關注提供一種方法管理你的業務對象。
◆ Spring是全面的和模塊化的。Spring有分層的體系結構,這意味着你能選擇使用它孤立的任何部分,它的架構仍然是內在穩定的。所以從你的學習中,你可獲得最大的價值。例如,你可能選擇僅僅使用Spring來簡單化JDBC的使用,或用來管理全部的業務對象。
◆它的設計從底部幫助你編寫易於測試的代碼。Spring是用於測試驅動工程的理想的framework。
Spring對你的工程來講,它不須要一個以上的framework。Spring是潛在地一站式解決方案,定位於與典型應用相關的大部分基礎結構。它也涉及到其餘framework沒有考慮到的內容。
Spring帶給咱們什麼
◆方便解耦,簡化開發
經過Spring提供的IoC容器,咱們能夠將對象之間的依賴關係交由Spring進行控制,避免硬編碼所形成的過分程序耦合。有了Spring,用戶沒必要再爲單實例模式類、屬性文件解析等這些很底層的需求編寫代碼,能夠更專一於上層的應用。
◆AOP編程的支持
經過Spring提供的AOP功能,方便進行面向切面的編程,許多不容易用傳統OOP實現的功能能夠經過AOP輕鬆應付。
◆聲明式事務的支持
在Spring中,咱們能夠從單調煩悶的事務管理代碼中解脫出來,經過聲明式方式靈活地進行事務的管理,提升開發效率和質量。
◆方便程序的測試
能夠用非容器依賴的編程方式進行幾乎全部的測試工做,在Spring裏,測試再也不是昂貴的操做,而是隨手可作的事情。
◆方便集成各類優秀框架
Spring不排斥各類優秀的開源框架,相反,Spring能夠下降各類框架的使用難度,Spring提供了對各類優秀框架(如Struts,Hibernate、Hession、Quartz)等的直接支持。
◆下降Java EE API的使用難度
Spring對不少難用的Java EE API(如JDBC,JavaMail,遠程調用等)提供了一個薄薄的封裝層,經過Spring的簡易封裝,這些Java EE API的使用難度大爲下降。
◆Java 源碼是經典學習範例
Spring的源碼設計精妙、結構清晰、匠心獨用,到處體現着大師對Java設計模式靈活運用以及對Java技術的高深造詣。Spring框架源碼無疑是Java技術的最佳實踐範例。若是想在短期內迅速提升本身的Java技術水平和應用開發水平,學習和研究Spring源碼將會使你收到意想不到的效果。web
Spring框架的好處
在咱們進入細節之前,讓咱們看一下Spring能夠給一個工程帶來的一些好處:
◆Spring能有效地組織你的中間層對象,不管你是否選擇使用了EJB。若是你僅僅使用了Struts或其餘的包含了J2EE特有APIs的framework,你會發現Spring關注了遺留下的問題,。
◆Spring能消除在許多工程上對Singleton的過多使用。根據個人經驗,這是一個主要的問題,它減小了系統的可測試性和麪向對象特性。
◆Spring能消除使用各類各樣格式的屬性定製文件的須要,在整個應用和工程中,可經過一種一致的方法來進行配置。曾經感到迷惑,一個特定類要查找迷幻般的屬性關鍵字或系統屬性,爲此不得不讀Javadoc乃至源編碼嗎?有了Spring,你可很簡單地看到類的JavaBean屬性。倒置控制的使用(在下面討論)幫助完成這種簡化。
◆Spring能經過接口而不是類促進好的編程習慣,減小編程代價到幾乎爲零。
◆Spring被設計爲讓使用它建立的應用盡量少的依賴於他的APIs。在Spring應用中的大多數業務對象沒有依賴於Spring。
◆使用Spring構建的應用程序易於單元測試。
◆Spring能使EJB的使用成爲一個實現選擇,而不是應用架構的必然選擇。你能選擇用POJOs或local EJBs來實現業務接口,卻不會影響調用代碼。
◆Spring幫助你解決許多問題而無需使用EJB。Spring能提供一種EJB的替換物,它們適於許多web應用。例如,Spring能使用AOP提供聲明性事務而不經過使用EJB容器,若是你僅僅須要與單個的數據庫打交道,甚至不須要JTA實現。
■Spring爲數據存取提供了一致的框架,不管是使用JDBC或O/R mapping產品(如Hibernate)。
Spring確實使你能經過最簡單可行的解決辦法解決你的問題。這些特性是有很大價值的。
總結起來,Spring有以下優勢:
◆低侵入式設計,代碼污染極低
◆ 獨立於各類應用服務器,能夠真正實現Write Once,Run Anywhere的承諾
◆Spring的DI機制下降了業務對象替換的複雜性
◆Spring並不徹底依賴於Spring,開發者可自由選用Spring框架的部分或所有數據庫
Spring能作什麼
Spring提供許多功能,在此我將快速地依次展現其各個主要方面。
首先,讓咱們明確Spring範圍。儘管Spring覆蓋了許多方面,但咱們已經有清楚的概念,它什麼應該涉及和什麼不該該涉及。
Spring的主要目的是使J2EE易用和促進好編程習慣。
Spring不從新開發已有的東西。所以,在Spring中你將發現沒有日誌記錄的包,沒有鏈接池,沒有分佈事務調度。這些均有開源項目提供(例如Commons Logging 用來作全部的日誌輸出,或Commons DBCP用來做數據鏈接池),或由你的應用程序服務器提供。由於一樣的的緣由,咱們沒有提供O/R mapping層,對此,已有有好的解決辦法如Hibernate和JDO。
Spring的目標是使已存在的技術更加易用。
例如,儘管咱們沒有底層事務協調處理,但咱們提供了一個抽象層覆蓋了JTA或任何其餘的事務策略。
Spring沒有直接和其餘的開源項目競爭,除非咱們感到咱們能提供新的一些東西。例如,象許多開發人員,咱們歷來沒有爲Struts高興過,而且感到在MVC web framework中還有改進的餘地。在某些領域,例如輕量級的IoC容器和AOP框架,Spring有直接的競爭,可是在這些領域尚未已經較爲流行的解決方案。(Spring在這些區域是開路先鋒。)
Spring也得益於內在的一致性。
全部的開發者都在唱一樣的的讚歌,基礎想法依然是Expert One-on-One J2EE設計與開發的那些。
而且咱們已經可以使用一些主要的概念,例如倒置控制,來處理多個領域。
Spring在應用服務器之間是可移植的。
固然保證可移植性老是一次挑戰,可是咱們避免任何特定平臺或非標準化,而且支持在WebLogic,Tomcat,Resin,JBoss,WebSphere和其餘的應用服務器上的用戶。編程