Spring框架的前世今生與系統架構


課題

Spring框架的前世今生及系統概述》

課程目標

1、通過對本章內容的學習,可以掌握Spring的基本架構及各子模塊之間的依賴關系。

2、了解Spirng的發展歷史,啟發思維。

3、Spring形成一個整體的認識,為之后的深入學習做鋪墊。

4、通過對本章內容的學習,可以了解Spring版本升級的規律,從而應用到自己的系統升級版本命名。

5、采用Gradle構建Spring5源碼。

內容定位

Spring使用經驗1-5年,希望深入了解Spring源碼的人群。

課程大綱

第一章:Spring的前世今生

1、一切從Bean開始

 

 

 

2、Spring的設計初衷

簡化開發

Spring簡化開發四個基本策略
  • 基於POJO的輕量級和最小侵入性編程
  • 通過依賴注入和面向接口松耦合
  • 基於切面和慣性進行聲明式編程
  • 通過切面和模板減少樣板式代碼

3、BOP編程伊始

4、依賴注入的基本概念

5、AOP編程理念

 

 

 

第二章:Spring5系統架構

Spring 總共大約有 20 個模塊,由 1300 多個不同的文件構成。而這些組件被分別整合在核心容器(Core
Container)、AOP(Aspect Oriented Programming)和設備支持(Instrmentation)、數據訪問
及集成(Data Access/Integeration)、Web、報文發送(Messaging)、Test,6 個模塊集合中。以
下是 Spring 5 的模塊結構圖: 
組成 Spring 框架的每個模塊集合或者模塊都可以單獨存在,也可以一個或多個模塊聯合實現。每個模
塊的組成和功能如下: 

核心容器

由spring-beans、spring-core、spring-context和spring-expression(Spring Expression Language,
SpEL) 4 個模塊組成。
spring-core 和 spring-beans 模塊是 Spring 框架的核心模塊,包含了控制反轉(Inversion of
Control, IOC)和依賴注入(Dependency Injection, DI)。BeanFactory 接口是 Spring 框架中的核
心接口,它是工廠模式的具體實現。BeanFactory 使用控制反轉對應用程序的配置和依賴性規范與實際
的應用程序代碼進行了分離。但 BeanFactory 容器實例化后並不會自動實例化 Bean,只有當 Bean 被
使用時 BeanFactory 容器才會對該 Bean 進行實例化與依賴關系的裝配。
spring-context 模塊構架於核心模塊之上,他擴展了 BeanFactory,為她添加了 Bean 生命周期控
制、框架事件體系以及資源加載透明化等功能。此外該模塊還提供了許多企業級支持,如郵件訪問、遠
程訪問、任務調度等,ApplicationContext 是該模塊的核心接口,她的超類是 BeanFactory。與
BeanFactory 不同,ApplicationContext 容器實例化后會自動對所有的單實例 Bean 進行實例化與依
賴關系的裝配,使之處於待用狀態。
spring-context-support 模塊是對 Spring IOC 容器的擴展支持,以及 IOC 子容器。
spring-context-indexer 模塊是 Spring 的類管理組件和 Classpath 掃描。
spring-expression 模塊是統一表達式語言(EL)的擴展模塊,可以查詢、管理運行中的對象,同
時也方便的可以調用對象方法、操作數組、集合等。它的語法類似於傳統 EL,但提供了額外的功能,最
出色的要數函數調用和簡單字符串的模板函數。這種語言的特性是基於 Spring 產品的需求而設計,他
可以非常方便地同 Spring IOC 進行交互。 

AOP和設備支持

由 spring-aop、spring-aspects 和 spring-instrument 3 個模塊組成。
spring-aop 是 Spring 的另一個核心模塊,是 AOP 主要的實現模塊。作為繼 OOP 后,對程序員影
響最大的編程思想之一,AOP 極大地開拓了人們對於編程的思路。在 Spring 中,他是以 JVM 的動態
代理技術為基礎,然后設計出了一系列的 AOP 橫切實現,比如前置通知、返回通知、異常通知等,同
時,Pointcut 接口來匹配切入點,可以使用現有的切入點來設計橫切面,也可以擴展相關方法根據需求
進行切入。
spring-aspects 模塊集成自 AspectJ 框架,主要是為 Spring AOP 提供多種 AOP 實現方法。
spring-instrument 模塊是基於 JAVA SE 中的"java.lang.instrument"進行設計的,應該算是 AOP
的一個支援模塊,主要作用是在 JVM 啟用時,生成一個代理類,程序員通過代理類在運行時修改類的
字節,從而改變一個類的功能,實現 AOP 的功能。在分類里,我把他分在了 AOP 模塊下,在 Spring 官
方文檔里對這個地方也有點含糊不清,這里是純個人觀點。

數據訪問與集成

由 spring-jdbc、spring-tx、spring-orm、spring-jms 和 spring-oxm 5 個模塊組成。
spring-jdbc 模塊是 Spring 提供的 JDBC 抽象框架的主要實現模塊,用於簡化 Spring JDBC 操作 。
主要是提供 JDBC 模板方式、關系數據庫對象化方式、SimpleJdbc 方式、事務管理來簡化 JDBC 編程,
主要實現類是 JdbcTemplate、SimpleJdbcTemplate 以及 NamedParameterJdbcTemplate。
spring-tx 模塊是 Spring JDBC 事務控制實現模塊。使用 Spring 框架,它對事務做了很好的封裝,
通過它的 AOP 配置,可以靈活的配置在任何一層;但是在很多的需求和應用,直接使用 JDBC 事務控
制還是有其優勢的。其實,事務是以業務邏輯為基礎的;一個完整的業務應該對應業務層里的一個方法;
如果業務操作失敗,則整個事務回滾;所以,事務控制是絕對應該放在業務層的;但是,持久層的設計
則應該遵循一個很重要的原則:保證操作的原子性,即持久層里的每個方法都應該是不可以分割的。所
以,在使用 Spring JDBC 事務控制時,應該注意其特殊性。
spring-orm 模塊是 ORM 框架支持模塊,主要集成 Hibernate, Java Persistence API (JPA) 和
Java Data Objects (JDO) 用於資源管理、數據訪問對象(DAO)的實現和事務策略。
spring-oxm 模塊主要提供一個抽象層以支撐 OXM(OXM 是 Object-to-XML-Mapping 的縮寫,
它是一個 O/M-mapper,將 java 對象映射成 XML 數據,或者將 XML 數據映射成 java 對象),例如:
JAXB, Castor, XMLBeans, JiBX 和 XStream 等。
spring-jms 模塊(Java Messaging Service)能夠發送和接收信息,自 Spring Framework 4.1 以
后,他還提供了對 spring-messaging 模塊的支撐。 

Web組件

由 spring-web、spring-webmvc、spring-websocket 和 spring-webflux 4 個模塊組成。
spring-web 模塊為 Spring 提供了最基礎 Web 支持,主要建立於核心容器之上,通過 Servlet 或
者 Listeners 來初始化 IOC 容器,也包含一些與 Web 相關的支持。
spring-webmvc 模塊眾所周知是一個的 Web-Servlet 模塊,實現了 Spring MVC
(model-view-Controller)的 Web 應用。
spring-websocket 模塊主要是與 Web 前端的全雙工通訊的協議。
spring-webflux 是一個新的非堵塞函數式 Reactive Web 框架,可以用來建立異步的,非阻塞,
事件驅動的服務,並且擴展性非常好。 

通信報文

即 spring-messaging 模塊,是從 Spring4 開始新加入的一個模塊,主要職責是為 Spring 框架集
成一些基礎的報文傳送應用。 

集成測試

即 spring-test 模塊,主要為測試提供支持的,畢竟在不需要發布(程序)到你的應用服務器或者連接
到其他企業設施的情況下能夠執行一些集成測試或者其他測試對於任何企業都是非常重要的。

各模塊之間的依賴關系

Spring 官網對 Spring5 各模塊之間的關系也做了詳細說明:

 

 

 

 

 

 

我本人也對 Spring5 各模塊做了一次系統的總結,描述模塊之間的依賴關系,希望能對小伙伴們有所
幫助。

 

 

第三章:Spring版本命名規則

1、常見軟件的版本號命名規則

 

 

2、語義化版本命名通行規則

 

 

 

3、商業軟件中常見的修飾詞

 

 

4、軟件版本號使用限定

為了方便理解,版本限定的語法簡述為為 [范圍描述]<版本號描述>
范圍描述可選,必須配和版本描述確定范圍,無法獨立存在
< 小於某一版本號
<= 小於等於某一版本號咕泡出品,必屬精品 www.gupaoedu.com
> 大於某一版本號
>= 大於等於某一版本號
= 等於某一版本號,沒有意義和直接寫該版本號一樣
~ 基於版本號描述的最新補丁版本
^ 基於版本號描述的最新兼容版本
- 某個范圍,他應該出現在兩個版本描述中間,實際上語法應為 <版本描述>-<版本描述>,寫在此處為了
統一
嚴格來講對 ~,^ 的表述需要結合具體的包管理工具和版本號規則來確定.但是對於一般使用記住如下
原則:
^ 是確保版本兼容性時,默認對次版本號的限定約束
~ 是確保版本兼容性時,默認對補丁號的約束 

5、Spring版本命名規則

 

 

第四章:Spring源碼下載及構建技巧

1、Spring5源碼下載注意事項

首先你的 JDK 需要升級到 1.8 以上。Spring3.0 開始,Spring 源碼采用 github 托管,不再提供官網下載
鏈接。這里不做過多贅述,大家可自行去 github 網站下載,我們使用的版本下載鏈接為:
https://github.com/spring-projects/spring-framework/archive/v5.0.2.RELEASE.zip,下載完成后,
解壓源碼包會看到以下文件目錄

2、基於Gradle的源碼構建技巧

由於 Spirng5 以后都是采用 Gradle 來編譯,所以構建源碼前需要先安裝 Gradle 環境。Gradle 下載地
址:https://gradle.org/releases,我使用的是 Spring5 官方推薦的版本 Gradle4.0,下載鏈接為:
https://gradle.org/next-steps/?version=4.0&format=bin , 下 載 完 成 后 按 以 下 步 驟 操 作 , 以
Windows 操作系統為例:
第一步:配置環境變量 
第二步:添加環境變量:Path:%GRADLE_HOME%\bin
第三步:檢測環境,輸入 gradle -v 命令,得到以下結果
第四步:編譯源碼,cmd 切到 spring-framework-5.0.2.RELEASE 目錄,運行 gradlew.bat 
第五步:轉換為 eclipse 項目,執行 import-into-eclipse.bat 命令,構建前,請確保網絡狀態良好,按
任意鍵繼續。
第六步:等待構建成功(若中途出現錯誤,大部分情況是由於網絡中斷造成的,重試之后一般都能解決
問題),構建成功后,會出現如下界面:

 

 

到這一步為止,還在使用 Eclipse 的小伙伴已經可以將項目導入到 Eclipse 中了。而我們推薦使用的 IDEA
也比較智能,可以直接兼容 Eclipse 項目。接下來看下面的步驟:
第七步:導入 IDEA。打開 IntelliJ IDEA,點擊 Import Project,彈出如下界面,選擇
spring-framework-5.0.2.RELEASE 文件夾: 

 

第八步:等待構建完成,在網絡良好的情況下大約需要 10 分鍾便可自動構建完成,你會看到如下界面:
第九步:在 IDEA 中,如果 Project 下的子項目文件夾變成粗體字之后,說明已經構建成功。還有一種
驗證方式是:找到 ApplicationContext 類,按 Ctrl + Shift + Alt + U,出現類圖界面說明構建成功。
如果我已經將構建好的“spring-framework-5.0.2.RELEASE-中文注釋版”,提交到了 Git 上,下載后導入到 IDEA 中
開箱即用,無需重復構建。 
 

3、Gradle構建過程中的坑

如果項目環境一直無法構建,項目文件夾沒有變粗體字,類圖無法自動生成。那么你一定是踩到了這樣一個坑。
第一步:首先打開 View->Tool Windows -> Gradle
 
然后,點擊右側 Gradle 視圖中的 Refresh,會出現如下的錯誤:
 
第二步:看錯誤,顯然跟 Gradle 沒有任何關系,解決辦法:
1.關閉 IDEA,打開任務管理器,結束跟 java 有關的所有進程。
2.找到 JAVA_HOME -> jre -> lib 目錄,將 tools.jar 重命名 tools.jar.bak。
3.重啟 IDEA,再次點擊 refresh,等待構建完成。 
 
 
 

課前准備

1、提前注冊ProcessOn賬號,https://processon.com。

2、下載源碼包並解壓,暫時無需構建,提前了解已下載好的源碼結構,思考其命名規則。下載地址:https://github.com/spring-projects/spring-framework/archive/v5.0.2.RELEASE.zip

3、可按照課程大綱自行提前查閱相關資料。

4、推薦書籍:《Spring in Action》

5、推薦書籍:《Spring權威指南》

 

課前准備

1、提前注冊ProcessOn賬號,https://processon.com。

2、下載源碼包並解壓,暫時無需構建,提前了解已下載好的源碼結構,思考其命名規則。下載地址:https://github.com/spring-projects/spring-framework/archive/v5.0.2.RELEASE.zip

3、可按照課程大綱自行提前查閱相關資料。

4、推薦書籍:《Spring in Action》

5、推薦書籍:《Spring權威指南》

 

課后作業

作業內容

1、使用ProcessOn繪制Spring系統架構圖。

2、整理筆記,完全理解Spring各模塊之間的依賴關系。

3、理解SpringIOC容器的核心作用,生成類關系圖。

4、安裝配置Gradle環境,構建Spring源碼。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM