1. 程式人生 > >2、Spring 的體系架構——未完成

2、Spring 的體系架構——未完成

Spring 的系統架構

Spring 總共大約有 20 個模組,由 1300 多個不同的檔案構成。而這些元件被分別整合在核心容器 (Core Container)AOP(Aspect Oriented Programming)Aspects裝置支援(Instrmentation)
資料訪問及整合(Data Access/Integeration)Web報文傳送(Messaging)Test,8個模組
集合中。以下是 Spring 5.x的模組結構圖:

在這裡插入圖片描述

組成 Spring 框架的每個模組集合或者模組都可以單獨存在, 也可以一個或多個模組聯合實現。 每個模組的組成和功能如下:

1、核心容器:由 spring-beansspring-corespring-contextspring-expression(Spring Expression Language, SpEL) 4 個模組組成。

spring-beansspring-core 模組是 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-expression模組是統一表示式語言(EL)的擴充套件模組,可以查詢、管理執行中的物件, 同時也方便的可以呼叫物件方法、運算元組、集合等。它的語法類似於傳統 EL,但提供了額外的功能,最出色的要數函式呼叫和簡單字串的模板函式。這種語言的特性是基於Spring 產品的需求而設計,他可以非常方便地同 Spring IOC進行互動。

2、AOP裝置支援:由 spring-aopspring-aspectsspring-instrument3 個模組組成。

spring-aopSpring 的另一個核心模組,是 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 官 方文件裡對這個地方也有點含糊不清,這裡是純個人觀點。

3、資料訪問及整合:由spring-jdbcspring-txspring-ormspring-jmsspring-oxm 5 個模組組成。

spring-jdbc 模組Spring 提供的 JDBC 抽象框架的主要實現模組,用於簡化 Spring JDBC。主要是提供 JDBC 模板方式關係資料庫物件化方式SimpleJdbc 方式事務管理來簡化 JDBC 程式設計,主要實現類是 JdbcTemplateSimpleJdbcTemplate 以及 NamedParameterJdbcTemplate

spring-tx 模組Spring JDBC 事務控制實現模組。使用 Spring 框架,它對事務做了很好的封裝,通過它的 AOP 配置,可以靈活的配置在任何一層;但是在很多的需求和應用,直接使用 JDBC 事務控制 還是有其優勢的。其實,事務是以業務邏輯為基礎的;一個完整的業務應該對應業務層裡的一個方法; 如果業務操作失敗,則整個事務回滾;所以,事務控制是絕對應該放在業務層的;但是,持久層的設計則應該遵循一個很重要的原則:保證操作的原子性,即持久層裡的每個方法都應該是不可以分割的。所以,在使用 Spring JDBC 事務控制時,應該注意其特殊性。

spring-orm 模組ORM 框架支援模組,主要整合HibernateJava Persistence API (JPA)Java Data Objects (JDO)用於資源管理、資料訪問物件(DAO)的實現和事務策略。

spring-jms 模組(Java Messaging Service)能夠傳送和接受資訊,自 Spring Framework 4.1以後,他還提供了對 spring-messaging 模組的支撐。

spring-oxm 模組主要提供一個抽象層以支撐OXM(OXM 是 Object-to-XML-Mapping 的縮寫,它是一個 O/M-mapper,將 java 物件對映成 XML 資料,或者將 XML 資料對映成 java 物件),例如:JAXBCastorXMLBeansJiBXXStream 等。

4、Web:由 spring-webspring-webmvcspring-websocketspring-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 框架,可以用來建立非同步的,非阻塞,事件驅動的服務,並且擴充套件性非常好。

5、報文傳送:即 spring-messaging 模組

spring-messaging是從 Spring 4開始新加入的一個模組,主要職責是為 Spring 框架整合一些基礎的報文傳送應用。

6、Test:即 spring-test 模組

spring-test 模組主要為測試提供支援的,畢竟在不需要釋出(程式)到你的應用伺服器或者連線到其他企業設施的情況下能夠執行一些整合測試或者其他測試對於任何企業都是非常重要的。

7、Spirng 各模組之間的依賴關係

該圖是 Spring 5的包結構,可以從中清楚看出 Spring 各個模組之間的依賴關係。

在這裡插入圖片描述

如果想學習 Spring 原始碼的學習,建議是從 spring-core 入手,其次是 spring-beans 和
spring-aop,隨後是 spring-context,再其次是 spring-tx 和 spring-orm,最後是 spring-web和其他部分。