一、Spring 介紹
在早期 J2EE 時代,開發一個應用程序很是繁瑣,先不說對象的建立及管理,如其它數據庫訪問、提供 Web 服務等都需耗費咱們大量時間。當時一位名爲 Rod Johnson 的澳大利亞人率先對這種 J2EE 系統框架臃腫、低效的種種現狀提出了質疑,以後 Rod Johnson 編寫《Expert one on one J2EE design and development》一書,經過書中闡述的部分理念和原型建立了Spring Framework 。(PS:Rod Johnson 竟然是音樂學博士???)web
Spring Framework 是一個輕量級的 Java開源框架,主要是爲了解決企業應用開發的複雜性而建立。它的核心是幫助咱們管理對象及其依賴關係,但還提供像通用日誌記錄、性能統計、安全控制、異常處理等面向切面的能力,還集成了大量的第三方框架,如數據庫訪問框架 Hibernate ,mybatis、Web 服務框架 Struts 、自身提供的SpringMVC,還有任務調度、Redis 緩存,Mq等。spring
Spring Framework 還致力於 J2EE 應用的各層解決方案,在表現層、業務層及持久層都集成了相應的功能框架,能夠說 Spring 是企業應用開發的「一站式」解決方案。數據庫
但其實 J2EE 和 Spring 並不對立,Spring 是 J2EE 的補充,它將 J2EE 的各個規範集成在一塊兒:編程
能夠說 Spring 是「借鑑了」他山之石,來逐步實現自身的生態系統。緩存
二、Spring 框架的演變
Spring 第一個版本於2002年10月發佈,至今十幾年間, Spring 框架的核心功能、社區支持等各方面都發展迅猛,因此有必要回顧一下Spring 每一個里程碑版本所帶來的重要特性。安全
- Spring 0.9:這是該框架第一個公開發布的版本,以《Expert One-on-One: J2EE Design and Development》一書爲基礎,提供了 bean 配置基礎、AOP 支持、JDBC 抽象框架、抽象事務支持等。該版本沒有官方參考文檔,但能夠在SourceForge 上找到現有的源代碼和文檔。
- Spring 1.x:這是發佈的第一個帶有官方參考文檔的版本。由七個模塊組成。
- Spring Core、Spring Context、Spring DAO、Spring ORM、Spring AOP、Spring Web、Spring Web MVC
- Spring 2.x:該版本由六個模塊組成,Spring Context 模塊融入了 Spring Core 中,Spring Web MVC 融入了 Spring Web 中。
- 支持 AOP 開發的 @AspectJ 註解。
- 徹底支持異步JMS 消息驅動的POJO。
- 爲調度任務而引入的 TaskExecutor 抽象。
- Java 5 註解支持,特別是 @Transactional、@Required 和 @AspectJ。
- Spring 2.5.x:該版本包含如下功能。
- 新增 @Autowired 註解以及對 JSR-250 註解(@Resource、@PostConstruct 和 @PreDestroy)的支持。
- 新增註冊 Bean 的相關注解:@Component、 @Repository、@Service 和 @Controller。
- 除了Spring MVC @Controller 註解,還添加了 @RequestMapping、@RequestParam 和@ModelAttribute 註解,從而支持經過註解配置進行請求處理。
- Spring 3.0.x:這是基於Java 5 的 Spring 第一個版本,旨在充分利用 Java5 的功能,如泛型、可變參數。
- 支持 Java5 功能,例如泛型、可變參數。
- 全面支持 REST。
- 新的 MVC XML 名稱空間和其餘註解,例如 SpringMVC 中的 @CookieValue 和 @RequessHeaders。
- 驗證加強功能和 JSR-303 (Bean 驗證)支持。
- Spring 3.2.x:該版本包含如下功能。
- 支持基於 Servlet 3.0 的異步請求處理。
- 新的 SpringMVC 註解 @ControllerAdvice。
- Spring 4.x:這是一個重要的 Spring 版本,也是第一個徹底支持 Java 8 的版本。雖然仍然可使用較舊的版本,但棄用的類和方法己被刪除。
- 全面支持 Hibernate ORM 5.0 。
- JMS 和 Web 改進。
- 對 WebSocket 消息傳遞的改進。
- 引入了AopTestUtils 實用工具類,容許訪問 Spring 代理的底層對象。
- Spring 5.x:這是一個主要版本,整個框架都基於Java 8。
- 充分利用Java 8 的強大功能,從而在性能上獲得極大的改進。
- 支持 JMS2.0+ 和 JPA 2.1+。
- 引入了 Spring Web Flux,這是一個用於替代 SpringMVC 的項目,構建在反應式基礎之上,徹底是異步和非阻塞的。
- Web 和核心模塊適用於反應式編程模型。
三、Spring 總體架構
到了 Spring 5.0 時代,其模塊大約有 20 個,如圖:服務器
這些模塊被總結爲如下幾部分。mybatis
Core Container
Core Container(核心容器)包含 Core 、Beans 、Context 和 Expression Language 四個模塊。架構
- Core 模決主要包含 Spring 框架的核心工具類,是其餘組件的基本核心。如動態代理相關的 asm、cglib,以及各類 Utils,StringUtils、CollectionUtils。
- Beans 模塊包含訪問配置文件、建立和管理 bean 以及進行 IoC/DI 操做相關的全部類。如:BeanFactory、BeanDefinitions 等。
- Context 模塊構建於 Core 和Beans 模塊基礎之上,其繼承了 Beans 的特性,爲Spring 核心提供了大量擴展。ApplicationContext 接口是 Context 模塊的核心。
- Expression Language 模塊提供了強大的表達式語言。就是在遠古 JSP 時期使用的 EL 表達式。
Data Access/Integration
Data Access/Integration 包含 JDBC 、ORM 、OXM、JMS 和 Transaction 模塊。
- JDBC 模塊提供了一個JDBC 抽象層,用來適配全部的數據庫廠商。這個模塊包含了 Spring 對 JDBC 數據訪問進行封裝的全部類。
- ORM 模塊提供了幾種經常使用的對象關係映射框架,如 JPA 、Hibernate 、iBatis 。
- OXM 模塊提供了一個對ObjecνXML 映射實現的抽象層。
- JMS (Java Messaging Service)模塊主要包含一些生產和消費消息的特性。
- Transaction 模塊支持編程和聲明性的事務管理。
Web
Web 層包含了Web 、Servlet 、WebSocket、Porlet 模塊。
- Web 模塊:提供了基礎的面向Web 的集成特性。例如,多文件上傳。
- Servlet 模塊:該模塊包含Spring 的model-view-controller (MVC)實現。
- WebSocket 模塊:提供 WebSocket 協議支持。
- Porlet 模塊:提供了用於 Portlet 環境和 Servlet 模塊的 MVC 的實現
AOP
AOP 模塊提供了一個符合 AOP 聯盟標準的面向切面編程實現,它讓你能夠定義例如方法攔截器和切點,從而將邏輯代碼分開,下降它們之間的耦合性。
- Aspects 模塊提供了對AspectJ 的集成支持。
- Instrumentation 模塊提供了class instrumentation 支持和classloader 實現,使得能夠在特定的應用服務器上使用。
- Messaging 模塊:對消息通訊集成提供了普遍的支持,及提供簡化 JMS API 的使用到異步接收消息的完整基礎結構。
Test
Test 模塊支持使用 JUnit 和TestNG 對 Spring 組件進行測試。
最後
Spring 背景及架構就介紹到這,接下來將對 Spring 核心容器、AOP、事務這三部份內容展開一系列的討論。
注:該系列文章使用的 Spring 版本是 5.0+。
以上就是本章內容,若是文章中有錯誤或者須要補充的請及時提出,本人感激涕零。
參考:
《Spring 源碼深度解析(第二版)》 《Spring5 高級編程》 《SpringBoot 編程思想》 https://baike.baidu.com/item/spring/85061#2 https://docs.spring.io/spring/docs/5.2.2.RELEASE/spring-framework-reference/overview.html#overview