Spring Framework 5 模組組成、體系結構、整體架構
核心容器(Core Containe)
核心容器提供了Spring框架的基本功能,是其它模組建立的基礎,有 spring-core
、spring-beans
、spring-context
、spring-context-support
和spring-expression
(Expression Language、SpEL)組成。spring-beans
和spring-core
是spring框架的核心模組。
spring-core
提供了框架的基本組成部分,包括控制翻轉(Inversion of Control, IOC)
和依賴注入(Dependency Injection, DI)
功能。
spring-beans
提供了BeanFactory
,BeanFactory
介面是spring
框架中的核心介面,它是工廠模式
的經典實現。BeanFactory
使用控制翻轉
對應用程式的配置和依賴性規範與實際的應用程式程式碼進行了分離。但BeanFactory
容器例項化後並不會自動建立例項化Bean
,只有當Bean
被使用的時候BeanFactory
容器才會對該Bean
進行例項化與依賴關係的裝配。
spring-context
spring-context
模組構架與spring-core
和spring-beans
模組之上,提供了一個框架式的物件訪問方式,是訪問定義和配置的任意物件的媒介。它擴充套件了BeanFactory
Bean
生命週期控制、框架事件體系以及資源載入透明化等功能。
ApplicationContext
是該模組的核心介面,它是BeanFactory
的子類,與BeanFactory
不同的是ApplicationContext
容器例項化後會自動對所有的單例項Bean
進行例項化與依賴關係的裝配,使之處於待用狀態。
spring-context-support
用於將常見的第三方庫整合到spring
應用程式上下文中。該模組提供了快取記憶體、任務排程、郵件訪問等支援。
spring-expression
該模組是對JSP2.1
規範中規定的統一表達式語言EL
的擴充套件模組,它提供了強大的表示式語言去支援執行時查詢和操作執行中的物件,該語言支援設定和獲取屬性值、屬性分配、方法呼叫、訪問陣列、集合和索引器的內容、邏輯和算術運算、變數命名以及從Spring的IOC容器中以名稱檢索物件。它還支援列表投影、選擇以及常用的列表聚合。
它的語法類似於傳統的EL
,但提供了額外的功能。最出色的要數函式呼叫和簡單字串的模板函式。這種語言的特性是基於 spring
產品的需求而設計, 他可以非常方便地同 spring IOC
進行互動。
AOP 和裝置支援(AOP)
由spring-aop
、spring-aspects
和 spring-instrument
3個模組組成。
spring-aop
spring-aop
是spring的另一個核心模組,提供了一個符合AOP要求的面相切面的程式設計實現。作為繼OOP
之後,對程式設計師影響最大的程式設計思想之一,AOP
極大的開拓了人們對於程式設計的思路。
在spring
中,以JDK動態代理
的技術為基礎,設計出了一系列的AOP
橫切實現,比如:前置通知
、返回通知
和異常通知
等。同時使用 Pointcut
介面匹配切入點,可以使用現有的切入點設計橫切面;也可以擴充套件相關方法根據需求進行切入,將程式碼按照功能進行分離,以便乾淨的解耦。
spring-aspects
提供了與AspectJ
的整合功能,主要是為AOP
提供了多種實現方法。
spring-instrument
該模組是spring-aop
的一個支援模組,提供了類植入(Instrumentation)支援和類載入器的實現。主要作用於JVM啟動時,生成一個代理類,程式設計師通過代理類在執行時修改類的位元組,從而改變一個類的功能,實現AOP
的功能。
資料訪問與整合(Data Access/Integration)
由spring-jdbc
、spring-orm
、spring-oxm
、spring-jms
和spring-tx
組成。
spring-jdbc
spring-jdbc
模組是spring
提供的JDBC
抽象層,消除了繁瑣的編碼以及資料庫廠商特有的錯誤程式碼解析。用於簡化JDBC
,主要提供JDBC
的模板方法、關係資料庫物件化方式、事務管理來簡化JDBC
程式設計,主要實現類有JdbcTemplate
、SimpleJdbcTemplate
以及NamedParameterJdbcTemplate
。
spring-orm
spring-orm
模組是ORM
的支援模組,主要整合Hibernate
、Java Persistence API(JPA)
和Java Data Object(JDO)
用於資源管理、資料訪問物件(DAO)的實現和事務策略。
spring-oxm
spring-oxm
模組主要提供一個抽象層支撐OXM(Object-to-XML-Mapping),例如:JAXB
、Castor
、XMLBeans
、JiBX
和XStream
等。
spring-jms
spring-jms
模組(Java Message Service)為Java訊息傳遞服務,能夠傳送和接收資訊,自Spring Framework 4.1 以後,它還提供了對spring-messaging
模組的繼承。
spring-tx
spring-tx
模組是spring-jdbc
事務控制實現模組,支援用於實現所有介面和所有POJO
(普通Java物件)類的程式設計和宣告式事務的管理。
Web
由spring-websocket
、spring-webmvc
、spring-web
和spring-webflux
組成
spring-web
spring-web
模組為spring
提供了最基礎的web
支援,主要建立在核心容器之上,通過Servlet
或者Listeners
來初始化IOC容器以及Web應用上下文,自動裝載WebApplicationContext
,也包含一些與web
相關的支援,如:Struts
整合類、檔案上傳支援的類、FIlter
類和大量輔助工具類。
spring-webmvc
也稱web-servlet
模組,包含用於Web
應用程式的Spring MVC
和REST Web Service
實現。Spring MVC框架提供了領域模型程式碼和Web
表單之間的清晰分離,並與Spring Framework
的所有其他功能整合。
spring-websocket
Spring4.0
以後新增的模組,實現雙工非同步通訊協議,實現了WebSocket
和SocketJS
,提供Socket
通訊和Web
端的推送功能。
spring-webflux
是一個新的非堵塞函式式Reactive Web
框架,可以用來建立非同步的,非阻塞,事件驅動的服務,並且擴充套件性非常好。
訊息(Messaging)
spring-messaging
spring-messaging
是從 Spring4.0
開始新加入的一個模組,主要職責是為 Spring
框架整合一些基礎的報文傳送應用。
Test
spring-test
spring-test
模組主要為測試提供支援的,畢竟在不需要釋出(程式)到你的應用伺服器或者連線到其他企業設施的情況下能夠執行一些整合測試或者其他測試對於任何企業都是非常重要的。
spring 各模組依賴關係
參考文章: