Spring框架的概述

1. 什麼是Spring:

Spring是分層的JavaSE/EE full-stack(一站式)輕量級開源框架。

*分層:

* SUN提供的EE的三層結構:web層、業務層、數據訪問層(持久層,集成層)

* Struts2web層基於MVC設計模式框架.

* Hibernate是持久的一個ORM的框架.

*一站式:

* Spring框架有對三層的每層解決方案:

* web:Spring MVC.

*持久層:JDBC Template

*業務層:SpringBean管理.

2. Spring的核心:

IOC:Inverse of Control反轉控制)

*控制反轉:  將對象的創建權,交由Spring完成.

AOP: Aspect Oriented Programming是 面向對象的功能延伸.不是替換面向對象,是用來解決OO中一些問題. 

3. Spring的版本:

Spring3.xSpring4.x

4. Spring優點:

a.方便解耦,簡化開發

* Spring就是一個大工廠,可以將所有對象創建和依賴關係維護,交給Spring管理

b.AOP編程的支持

* Spring提供面向切面編程,可以方便的實現對程序進行權限攔截、運行監控等功能

c.聲明式事務的支持

* 只需要通過配置就可以完成對事務的管理,而無需手動編程

d.方便程序的測試

* Spring對Junit4支持,可以通過註解方便的測試Spring程序

e.方便集成各種優秀框架

* Spring不排斥各種優秀的開源框架,其內部提供了對各種優秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持

f.降低JavaEE API的使用難度

* Spring 對JavaEE開發中非常難用的一些API(JDBC、JavaMail、遠程調用等),都提供了封裝,使這些API應用難度大大降低

5. Spring3框架圖


以下內容來自於:

http://tec.5lulu.com/detail/110d0n2eh1gyy85b6.html


組成 Spring 框架的每個模塊(或組件)都可以單獨存在,或者與其他一個或多個模塊聯合實現。每個模塊的功能如下:


*Spring-core核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要組件是 BeanFactory,它是工廠模式的實現。BeanFactory 使用控制反轉 (IOC) 模式將應用程序的配置和依賴性規範與實際的應用程序代碼分開。


*Spring context上下文:Spring 上下文是一個配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企業服務,例如:JNDI、EJB、電子郵件、國際化、校驗和調度功能。


*Spring AOP:通過配置管理特性,Spring AOP 模塊直接將面向面的編程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何對象支持 AOP。Spring AOP 模塊爲基於 Spring 的應用程序中的對象提供了事務管理服務。通過使用 Spring AOP,不用依賴 EJB 組件,就可以將聲明性事務管理集成到應用程序中。


*Spring DAO:JDBC DAO 抽象層提供了有意義的異常層次結構,可用該結構來管理異常處理和不同數據庫供應商拋出的錯誤消息。異常層次結構簡化了錯誤處理,並且極大地降低了需要編寫的異常代碼數量(例如打開和關閉連接)。Spring DAO 的面向 JDBC 的異常遵從通用的 DAO 異常層次結構。


*Spring ORM:Spring 框架插入了若干個 ORM 框架,從而提供了 ORM 的對象關係工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有這些都遵從 Spring 的通用事務和 DAO 異常層次結構。


*Spring Web 模塊:Web 上下文模塊建立在應用程序上下文模塊之上,爲基於 Web 的應用程序提供了上下文。所以,Spring 框架支持與 Jakarta Struts 的集成。Web 模塊還簡化了處理多部分請求以及將請求參數綁定到域對象的工作。


*Spring MVC 框架:MVC 框架是一個全功能的構建 Web 應用程序的 MVC 實現。通過策略接口,MVC 框架變成爲高度可配置的,MVC 容納了大量視圖技術,其中包括 JSP、Velocity、Tiles、iText 和 POI。

從下圖(該圖來自SPRING 3.2.X 源代碼分析之二: SPRING源碼的包結構)可以看出 Spring 各個模塊之間的依賴關係。

Spring源碼整體架構,by 5lulu.com

從圖中可以看出,IOC 的實現包 spring-beans 和 AOP 的實現包 spring-aop 也是整個框架的基礎,而 spring-core 是整個框架的核心,基礎的功能都在這裏。

在此基礎之上,spring-context 提供上下文環境,爲各個模塊提供粘合作用。

在 spring-context 基礎之上提供了 spring-tx 和 spring-orm包,而web部分的功能,都是要依賴spring-web來實現的。


 6.Spring4 的系統架構圖

Spring源碼整體架構,by 5lulu.com

Spring 4.0.x對比Spring3.2.x的系統架構變化(以下文字摘抄於SPRING 3.2.X 源代碼分析之三: SPRING源碼的整體架構分析):

從圖中可以看出,總體的層次結構沒有太大變化,變化的是 Spring 4.0.3去掉了 struts 模塊(spring-struts包)。現在的 Spring mvc的確已經足夠優秀了,大量的 web 應用均已經使用了 Spring mvc。而 struts1.x 的架構太落後了,struts2.x 是 struts 自身提供了和 Spring 的集成包,但是由於之前版本的 struts2 存在很多致命的安全漏洞,所以,大大影響了其使用度,好在最新的2.3.16版本的 struts 安全有所改善,希望不會再出什麼大亂子。

web 部分去掉了 struts 模塊,但是增加 WebSocket 模塊(spring-websocket包),增加了對 WebSocket、SockJS 以及 STOMP 的支持,它與 JSR-356 Java WebSocket API 兼容。另外,還提供了基於 SockJS(對 WebSocket 的模擬)的回調方案,以適應不支持 WebSocket 協議的瀏覽器

同時,增加了 messaging 模塊(spring-messaging),提供了對 STOMP 的支持,以及用於路由和處理來自 WebSocket 客戶端的 STOMP 消息的註解編程模型spring-messaging 模塊中還 包含了 Spring Integration 項目中的核心抽象類,如 Message、MessageChannel、MessageHandler。

如果去看源代碼的話,還可以發現還有一個新增的包,加強了 beans 模塊,就是 spring-beans-groovy。應用可以部分或完全使用 Groovy 編寫。藉助於 Spring 4.0,能夠使用 Groovy DSL 定義外部的 Bean 配置,這類似於 XML Bean 聲明,但是語法更爲簡潔。使用Groovy還能夠在啓動代碼中直接嵌入Bean的聲明。

還有一些:

  • 刪除過時的包和方法。具體API變動可以參考變動報告,第三方類庫至少使用2010/2011年發佈的版本,尤其是Hibernate 3.6+, EhCache 2.1+, Quartz 1.8+, Groovy 1.8+, and Joda-Time 2.0+。Hibernate Validator要求使用4.3+,Jackson 2.0+。
  • Java 8支持。當然也支持Java6和Java7,但最好在使用Spring框架3.X或4.X時,將JDK升級到Java7,因爲有些版本至少需要Java7。
  • Java EE 6和7。使用Spring4.x時Java EE版本至少要6或以上,且需要JPA 2.0和Servlet 3.0 的支持,所以服務器,web容器需要做相應的升級。一個更具前瞻性的注意是,Spring4.0支持J2EE 7的適用級規範,比如JMS 2.0, JTA 1.2,JPA 2.1, Bean Validation 1.1和JSR-236併發工具包,在選擇這些jar包時需要注意版本。
  • 使用Groovy DSL定義外部Bean
  • 核心容器提升:
    • 1、支持Bean的泛型注入,比如:@Autowired Repository<Customer> customerRepository
    • 2、使用元註解開發暴露指定內部屬性的自定義註解。
    • 3、通過 @Ordered 註解或Ordered 接口對注入集合或數組的 Bean 進行排序。
    • 4、@Lazy 註解可以用在注入點或 @Bean 定義上。
    • 5、爲開發者引入 @Description 註解。
    • 6、引入 @Conditional 註解進行有條件的 Bea n過濾。
    • 7、基於 CGLIB 的代理類不需要提供默認構造器,因爲 Spring 框架將 CGLIB 整合到內部了。
    • 8、框架支持時區管理,比如 LocalContext。
  • Web提升:
    • 1、增加新的 @RestController 註解,這樣就不需要在每個 @RequestMapping 方法中添加 @ResponseBody 註解。
    • 2、添加 AsyncRestTemplate,在開發 REST 客戶端時允許非阻塞異步支持。
    • 3、爲 Spring MVC 應用程序開發提供全面的時區支持。
  • WebSocket,SockJS 和 STOMP 消息。
  • 測試提升:
    • 1、spring-test 模塊裏的幾乎所有註解都能被用做元註解去創建自定義註解,來減少跨測試集時的重複配置。
    • 2、活躍的 bean 定義配置文件可以編程方式解析。
    • 3、spring-core 模塊裏引入一個新的 SocketUtils 類,用於掃描本地可使用的 TCP 和 UDP 服務端口。一般用於測試需要 socket 的情況,比如測試開啓內存 SMTP 服務,FTP 服務,Servlet 容器等。
    • 4、由於 Spring4.0 的原因,org.springframework.mock.web 包現在基於 Servlet 3.0 API


閱讀過程:

因爲 Spring 是分模塊的,所以閱讀 Spring 3.2.11 版本的源碼過程打算先從最底層的模塊開始,然後再由下向上分析每一個模塊的實現過程。在閱讀過程中,隨着對代碼的理解加深,也會重新閱讀已經讀過的代碼。

大概的閱讀順序:

  • spring-core:瞭解 Spring 提供哪些工具類以及一些基礎的功能,如對資源文件的封裝、對 Propertis 文件操作的封裝、對 Environment 的封裝等等。
  • spring-context:通過分析 Spring 的啓動方式,瞭解 Spring xml 文件的解析過程,bean 的初始化過程
  • spring-orm
  • spring-tx
  • spring-web

注意:這裏使用的Spring 版本是 3.2.11,下載地址在:https://github.com/spring-projects/spring-framework/releases



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章