Spring(一)開篇

1、Spring 介紹

在早期 J2EE 時代,開發一個應用程序非常繁瑣,先不說對象的創建及管理,如其它數據庫訪問、提供 Web 服務等都需耗費我們大量時間。當時一位名爲 Rod Johnson 的澳大利亞人率先對這種 J2EE 系統框架臃腫、低效的種種現狀提出了質疑,之後 Rod Johnson 編寫《Expert one on one J2EE design and development》一書,通過書中闡述的部分理念和原型創建了Spring Framework 。(PS:Rod Johnson 居然是音樂學博士???)

Spring Framework 是一個輕量級的 Java開源框架,主要是爲了解決企業應用開發的複雜性而創建。它的核心是幫助我們管理對象及其依賴關係,但還提供像通用日誌記錄、性能統計、安全控制、異常處理等面向切面的能力,還集成了大量的第三方框架,如數據庫訪問框架 Hibernate ,mybatis、Web 服務框架 Struts 、自身提供的SpringMVC,還有任務調度、Redis 緩存,Mq等。

Spring Framework 還致力於 J2EE 應用的各層解決方案,在表現層、業務層及持久層都集成了相應的功能框架,可以說 Spring 是企業應用開發的“一站式”解決方案。

但其實 J2EE 和 Spring 並不對立,Spring 是 J2EE 的補充,它將 J2EE 的各個規範集成在一起:

可以說 Spring 是“借鑑了”他山之石,來逐步實現自身的生態系統。

2、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 和核心模塊適用於反應式編程模型。

3、Spring 整體架構

到了 Spring 5.0 時代,其模塊大約有 20 個,如圖:
image
這些模塊被總結爲以下幾部分。

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

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