Spring5 系統架構

一,系統架構

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

1.1 核心容器:由 spring-beans、spring-core、spring-context 和 spring-expression(Spring Expression Language, SpEL) 4 個模塊組成。

  spring-beans 和 spring-core 模塊是 Spring 框架的核心模塊,包含了控制反轉(Inversion of
Control, IOC)和依賴注入(Dependency Injection, DI)。BeanFactory 接口是 Spring 框架中
的核心接口,它是工廠模式的具體實現。BeanFactory 使用控制反轉對應用程序的配置和依賴性規範與
實際的應用程序代碼進行了分離。但 BeanFactory 容器實例化後並不會自動實例化 Bean,只有當 Bean
被使用時 BeanFactory 容器纔會對該 Bean 進行實例化與依賴關係的裝配。java

  spring-context 模塊構架於核心模塊之上,他擴展了 BeanFactory,爲她添加了 Bean 生命週期
控制、框架事件體系以及資源加載透明化等功能。此外該模塊還提供了許多企業級支持,如郵件訪問、
遠程訪問、任務調度等,ApplicationContext 是該模塊的核心接口,她是 BeanFactory 的超類,與
BeanFactory 不一樣,ApplicationContext 容器實例化後會自動對全部的單實例 Bean 進行實例化與
依賴關係的裝配,使之處於待用狀態。程序員

  spring-expression 模塊是統一表達式語言(EL)的擴展模塊,能夠查詢、管理運行中的對象,
同時也方便的能夠調用對象方法、操做數組、集合等。它的語法相似於傳統 EL,但提供了額外的功能,
最出色的要數函數調用和簡單字符串的模板函數。這種語言的特性是基於 Spring 產品的需求而設計,
他能夠很是方便地同 Spring IOC 進行交互。 web

1.2 AOP 和設備支持:由 spring-aop、spring-aspects 和 spring-instrument 3 個模塊組成。

  spring-aop 是 Spring 的另外一個核心模塊,是 AOP 主要的實現模塊。做爲繼 OOP 後,對程序員影
響最大的編程思想之一,AOP 極大地開拓了人們對於編程的思路。在 Spring 中,他是以 JVM 的動態代
理技術爲基礎,而後設計出了一系列的 AOP 橫切實現,好比前置通知、返回通知、異常通知等,同時,
Pointcut 接口來匹配切入點,可使用現有的切入點來設計橫切面,也能夠擴展相關方法根據需求進
行切入。spring

  spring-aspects 模塊集成自 AspectJ 框架,主要是爲 Spring AOP 提供多種 AOP 實現方法。
spring-instrument 模塊是基於 JAVA SE 中的」java.lang.instrument」進行設計的,應該算是
AOP 的一個支援模塊,主要做用是在 JVM 啓用時,生成一個代理類,程序員經過代理類在運行時修改類
的字節,從而改變一個類的功能,實現 AOP 的功能。在分類裏,我把他分在了 AOP 模塊下,在 Spring 官
方文檔裏對這個地方也有點含糊不清,這裏是純我的觀點。數據庫

1.3 數據訪問及集成:由spring-jdbc、spring-tx、spring-orm、spring-jms 和 spring-oxm 5 個模塊組成。

  spring-jdbc 模塊是 Spring 提供的 JDBC 抽象框架的主要實現模塊,用於簡化 Spring JDBC。主
要是提供 JDBC 模板方式、關係數據庫對象化方式、SimpleJdbc 方式、事務管理來簡化 JDBC 編程,主要實現類是 JdbcTemplate、SimpleJdbcTemplate 以及 NamedParameterJdbcTemplate。express

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

  spring-orm 模塊是 ORM 框架支持模塊,主要集成 Hibernate, Java 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 對象),例如:JAXB,Castor, XMLBeans, JiBX 和 XStream 等。

1.4 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 框架,能夠用來創建異步的,非阻塞,事件驅動的服務,而且擴展性很是好。

1.5 報文發送:即 spring-messaging 模塊。

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

1.6 Test:即 spring-test 模塊。

  spring-test 模塊主要爲測試提供支持的,畢竟在不須要發佈(程序)到你的應用服務器或者鏈接
到其餘企業設施的狀況下可以執行一些集成測試或者其餘測試對於任何企業都是很是重要的。

1.7 Spirng 各模塊之間的依賴關係

  該圖是 Spring5 的包結構,能夠從中清楚看出 Spring 各個模塊之間的依賴關係。

這裏寫圖片描述
若是想學習 Spring 源碼的學習,建議是從 spring-core 入手,其次是 spring-beans 和
spring-aop,隨後是 spring-context,再其次是 spring-tx 和 spring-orm,最後是 spring-web和其餘部分。

文檔有參考其餘資料,若是問題請聯繫我,進行刪除!

相關文章
相關標籤/搜索