Spring的概述
Spring是一種開源輕量級框架,是為了解決企業應用程序開發複雜性而創建的,Spring致力於解決JavaEE的各層解決方案,而不僅僅於某一層的方案。
2002年RodJohnson寫了一本書叫《Expert one on one J2EE 設計與開發》
在這本書中,他對傳統的,J2EE技術日益臃腫和低效提出了質疑,他覺得應該有更便捷的做法,緊接著根據此書的思想,他提出了Interface21框架,這個框架就是Spring的雛形。
他提出了技術實用為準的主張,引發了人們對“正統”J2EE的反思,2003年2月Spring框架正式稱為一道開源項目,Spring致力於J2EE應用的各種解決方案,而不僅僅專注於某一層解決方案。可以說Spring是企業應用開發的“一站式”選擇, Spring貫穿於表現層、業務層、持久層,然而Spring並不想取代那些已經有的框架,而是以高度的開放性,與這些已有的框架進行整合。Spring確實給人一種特別清新,爽朗的感覺。彷彿雨後的綠草叢,討人喜歡,又蘊藏著勃勃生機。Spring是一個輕量級框架,它大大簡化了Java企業級開發,提供了強大穩定的功能,沒有帶來額外的負擔,讓人們用Spring做每一件事情的時候,都有得體和優雅的感覺。
Spring有兩個目標:
1、讓現有的技術更容易使用,
2、促進良好的編程習慣。
Spring是一個全面的解決方案,它堅持一個原則:不從新造輪子。已經有較好解決方案的領域,Spring絕不重複性實現,比如:對象持久化和OR映射,Spring只對現有的JDBC,Hibernate等技術提供支持,使之更容易使用,而不做重複的實現。Spring框架有很多特性,這些特性由7個定義良好的模塊構成。
Spring體系結構
目前Spring最新版本已經發展到3.1版本了,在Spring各版本中,Spring的功能和特點大致是被組織成了7個部分。
1、 Spring Core:Spring框架的核心,提供了IOC和依賴注入特性
2、 Spring Context:它提供了一種框架風格的方式來訪問對象,有些像JNDI註冊表,它繼承自Beans包的功能,同時增加了國際化,事件傳播,資源裝載,以及透明創建上下文
3、 Spring AOP:通過配置管理,Spring AOP直接將面向方面編程功能集成到了Spring框架中
4、 Spring DAO:提供了JDBC抽象層,它可以消除冗長的JDBC編碼和解析數據塊廠商特有的錯誤代碼
5、 Spring ORM:Spring框架插入了若干個ORM框架,從而提供了ORM對象關係工具,其中包括,JDO,Hibernate,iBatis等。所有這些都遵從Spring的通用事物和DAO異常層次結構。
6、 Spring Web模塊:Spring的Web上下文建模建立在應用程序上下文模塊之上,為基於Web的應用程序提供了上下文,所以,他支持與Jakarta Struts的集成,
7、 Spring MVC框架:MVC框架是一個全功能的構建Web應用程序的MVC實現。
當然7各部分不是絕對的,這是比較早的結構劃分,也是在Spring1.2的時候提出的,在Spring2.0版本,這7個部分優化成了6個部分。
我們知道了Spring大致分為7各部分之後,下面我們來看一下各個部分的應用場景
1、 Spring Core:即,Spring核心,它是框架最基礎的部分,提供IOC和依賴注入特性
2、 Spring Context:即,Spring上下文容器,它是BeanFactory功能加強的一個子接口
3、 Spring Web:它提供Web應用開發的支持
4、 Spring MVC:它針對Web應用中MVC思想的實現
5、 Spring DAO:提供對JDBC抽象層,簡化了JDBC編碼,同時,編碼更具有健壯性。
6、 Spring ORM:它支持用於流行的ORM框架的整合,比如:Spring + Hibernate、Spring + iBatis、Spring + JDO的整合等等。
7、 Spring AOP:AOP即,面向切面編程,它提供了與AOP聯盟兼容的編程實現
實際上這些模塊之間並不是全部緊密聯繫的,大部分是可獨立使用的。也就是說,我們可以單獨使用Spring框架中的一個模塊或幾個模塊。
Spring Core 和 Spring Context
Spring框架核心以BeanFactory為基礎,以bean的方式組織,管理Java應用中個組件以及組件之間的依賴關係,松耦合運行良好,這是因為Spring的核心機制,這個機制就是依賴注入,什麼是依賴注入,我們後面再講。這裡我們只需要知道 依賴注入 是Spring的核心機制。
Spring使用BeanFactory作為應用中負責生產和管理個組件的工廠,同時,BeanFacotry也是組件運行的容器,而BeanFactory是根據配置文件,來確定容器中的bean實現。Bean之間的依賴關係,是由BeanFactory來管理的,bean的實例化過程也是由BeanFactory來管理,這裡我們通過依賴注入,就可以實現bean對bean實現類的依賴解耦,變成對接口的依賴。程序從面向具體的類的編程,變成了面向接口編程,這樣就可以極大的降低應用程序中各組件之間的耦合。而Spring Context是BeanFactory的加強,也就是說Spring Context是BeanFactory的一個加強版的子接口。它提供了J2EE應用程序中大量的增強功能,比如:隨著Web應用啟動的自我創建,程序國際化等。
Spring Web 和 Spring MVC
對於Spring體系結構中Web和MVC這兩個模塊主要提供Web應用程序方面的支持,他們是有區別的,比如:Spring Web框架 它圍分發器DispatcherServlet設計。DispatcherServlet將請求分發到不同的處理器,這個就是它的設計原理。
而至於Spring MVC框架,提供了清晰的角色劃分,這些角色包括控制器,驗證器,命令對象、表單對象,模型對象,分發器,處理器,映射和解析器等等。Spring MVC支持多種表現層技術:Velocity、XSLT等等,甚至可以直接輸出也就是返回PDF電子文檔或者Excel文檔,這就是Spring的強大之處。
Spring AOP面向切面編程:
面向切面編程,實際上AOP是起源於面向對象編程OOP,面向對象編程我們已經很熟悉了,面向對象編程的過程中,實際上是有一定的侷限性的,比如:事務處理,那麼AOP就對OOP進行了補充和完善,它解決了OOP無力解決的問題,但是AOP和OOP之間不能互相替代,也就是說雖然AOP是OOP發展而來的,但是不能完全取代OOP,它們是相互補充,共利共贏。“切面”我們可以想象成一個長滾木,切斷後形成的“截面”,我們可以理解為“切面”,面向對象代碼中,程序代碼是銜接的,舉個例子:比如某行對象操作出現了異常,對於OOP接下來就是異常處理。那麼整個過程,可以抽象理解為程序是上下結構的,而AOP則是面向截面的,我們再來看個例子,當程序某個點出現異常,接下來程序不必寫異常處理代碼,直接執行後面的程序。我們可以把異常看成透明的,那麼如何異常處理呢?當程序拋出異常的時候,AOP會將程序攔住,執行攔截中的異常處理代碼,這段代碼可以專門用作異常處理,說的簡單些,AOP就是可以攔截程序流程,執行“截面”裡面的代碼,對於Spring框架中的面向切面編程模塊,它完善了Spring的依賴注入,而它的完善作用主要表現在兩個方面,1、面向切面編程提供了聲明式事務處理2、Spring支持用戶自定義切面。
實際上Spring還可以與AspectJ整合,整合後允許通過依賴注入配置AspectJ的切面。
Spring持久化的支持:
Spring沒有自己實現持久化解決方案,它集合了現有流行的持久化框架,比如:Hibernate、iBatis,JDO等框架,另外,由於喜歡使用JDBC完成數據持久化的程序員,Spring採用了JDBC模板封裝了JDBC的數據塊操作。那麼程序員可以以更加方便的方式使用JDBC,Spring對各種持久化技術提供了一致的編程方式,不管是直接使用JDBC,還是使用各種流行的ORM框架,Spring都提供一致的異常繼承體系。它使用模板封裝持久化訪問的通用步驟,來自底層的數據庫的異常都是難以恢復的,因此Spring將數據塊訪問的checked異常轉換為運行異常。這樣在編譯的時候就不會出現編譯異常。避免了繁瑣的try......catch.......
這是Spring框架提供的便捷點。