|
組成 Spring 框架的每個模塊集合或者模塊都可以單獨(dú)存在,也可以一個或多個模塊聯(lián)合實現(xiàn)。每個模
塊的組成和功能如下:
1.核心容器:
由 spring-beans、spring-core、spring-context 和 spring-expression(Spring
Expression Language, SpEL) 4 個模塊組成。
spring-beans 和 spring-core 模塊是 Spring 框架的核心模塊,包含了控制反轉(zhuǎn)(Inversion of
Control, IOC)和依賴注入(Dependency Injection, DI)。BeanFactory 接口是 Spring 框架中
的核心接口,它是工廠模式的具體實現(xiàn)。BeanFactory 使用控制反轉(zhuǎn)對應(yīng)用程序的配置和依賴性規(guī)范與
實際的應(yīng)用程序代碼進(jìn)行了分離。但 BeanFactory 容器實例化后并不會自動實例化 Bean,只有當(dāng) Bean
被使用時 BeanFactory 容器才會對該 Bean 進(jìn)行實例化與依賴關(guān)系的裝配。
spring-context 模塊構(gòu)架于核心模塊之上,他擴(kuò)展了 BeanFactory,為她添加了 Bean 生命周期
控制、框架事件體系以及資源加載透明化等功能。此外該模塊還提供了許多企業(yè)級支持,如郵件訪問、
遠(yuǎn)程訪問、任務(wù)調(diào)度等,ApplicationContext 是該模塊的核心接口,她是 BeanFactory 的超類,與
BeanFactory 不同,ApplicationContext 容器實例化后會自動對所有的單實例 Bean 進(jìn)行實例化與
依賴關(guān)系的裝配,使之處于待用狀態(tài)。
spring-expression 模塊是統(tǒng)一表達(dá)式語言(EL)的擴(kuò)展模塊,可以查詢、管理運(yùn)行中的對象,
同時也方便的可以調(diào)用對象方法、操作數(shù)組、集合等。它的語法類似于傳統(tǒng) EL,但提供了額外的功能,
最出色的要數(shù)函數(shù)調(diào)用和簡單字符串的模板函數(shù)。這種語言的特性是基于 Spring 產(chǎn)品的需求而設(shè)計,
他可以非常方便地同 Spring IOC 進(jìn)行交互。
2.AOP 和設(shè)備支持:
由 spring-aop、spring-aspects 和 spring-instrument 3 個模塊組成。
spring-aop 是 Spring 的另一個核心模塊,是 AOP 主要的實現(xiàn)模塊。作為繼 OOP 后,對程序員影
響最大的編程思想之一,AOP 極大地開拓了人們對于編程的思路。在 Spring 中,他是以 JVM 的動態(tài)代
理技術(shù)為基礎(chǔ),然后設(shè)計出了一系列的 AOP 橫切實現(xiàn),比如前置通知、返回通知、異常通知等,同時,
Pointcut 接口來匹配切入點,可以使用現(xiàn)有的切入點來設(shè)計橫切面,也可以擴(kuò)展相關(guān)方法根據(jù)需求進(jìn)
行切入。
spring-aspects 模塊集成自 AspectJ 框架,主要是為 Spring AOP 提供多種 AOP 實現(xiàn)方法。
spring-instrument 模塊是基于 JAVA SE 中的"java.lang.instrument"進(jìn)行設(shè)計的,應(yīng)該算是
AOP 的一個支援模塊,主要作用是在 JVM 啟用時,生成一個代理類,程序員通過代理類在運(yùn)行時修改類
的字節(jié),從而改變一個類的功能,實現(xiàn) AOP 的功能。在分類里,我把他分在了 AOP 模塊下,在 Spring 官
方文檔里對這個地方也有點含糊不清,這里是純個人觀點。
3.數(shù)據(jù)訪問及集成:
由 spring-jdbc、spring-tx、spring-orm、spring-jms 和 spring-oxm 5 個
模塊組成。
spring-jdbc 模塊是 Spring 提供的 JDBC 抽象框架的主要實現(xiàn)模塊,用于簡化 Spring JDBC。主
要是提供 JDBC 模板方式、關(guān)系數(shù)據(jù)庫對象化方式、SimpleJdbc 方式、事務(wù)管理來簡化 JDBC 編程,主
要實現(xiàn)類是 JdbcTemplate、SimpleJdbcTemplate 以及 NamedParameterJdbcTemplate。
spring-tx 模塊是 Spring JDBC 事務(wù)控制實現(xiàn)模塊。使用 Spring 框架,它對事務(wù)做了很好的封裝,
通過它的 AOP 配置,可以靈活的配置在任何一層;但是在很多的需求和應(yīng)用,直接使用 JDBC 事務(wù)控制
還是有其優(yōu)勢的。其實,事務(wù)是以業(yè)務(wù)邏輯為基礎(chǔ)的;一個完整的業(yè)務(wù)應(yīng)該對應(yīng)業(yè)務(wù)層里的一個方法;
如果業(yè)務(wù)操作失敗,則整個事務(wù)回滾;所以,事務(wù)控制是絕對應(yīng)該放在業(yè)務(wù)層的;但是,持久層的設(shè)計
則應(yīng)該遵循一個很重要的原則:保證操作的原子性,即持久層里的每個方法都應(yīng)該是不可以分割的。所
以,在使用 Spring JDBC 事務(wù)控制時,應(yīng)該注意其特殊性。
spring-orm 模塊是 ORM 框架支持模塊,主要集成 Hibernate, Java Persistence API (JPA) 和
Java Data Objects (JDO) 用于資源管理、數(shù)據(jù)訪問對象(DAO)的實現(xiàn)和事務(wù)策略。
spring-jms 模塊(Java Messaging Service)能夠發(fā)送和接受信息,自 Spring Framework 4.1
以后,他還提供了對 spring-messaging 模塊的支撐。
spring-oxm 模塊主要提供一個抽象層以支撐 OXM(OXM 是 Object-to-XML-Mapping 的縮寫,它是
一個 O/M-mapper,將 java 對象映射成 XML 數(shù)據(jù),或者將 XML 數(shù)據(jù)映射成 java 對象),例如:JAXB,
Castor, XMLBeans, JiBX 和 XStream 等。
4.Web:
由 spring-web、spring-webmvc、spring-websocket 和 spring-webflux 4 個模塊組
成。
spring-web 模塊為 Spring 提供了最基礎(chǔ) Web 支持,主要建立于核心容器之上,通過 Servlet 或
者 Listeners 來初始化 IOC 容器,也包含一些與 Web 相關(guān)的支持。
spring-webmvc 模 塊 眾 所 周 知 是 一 個 的 Web-Servlet 模 塊 , 實 現(xiàn) 了 Spring MVC
(model-view-Controller)的 Web 應(yīng)用。
spring-websocket 模塊主要是與 Web 前端的全雙工通訊的協(xié)議。(資料缺乏,這是個人理解)
spring-webflux 是一個新的非堵塞函數(shù)式 Reactive Web 框架,可以用來建立異步的,非阻塞,
事件驅(qū)動的服務(wù),并且擴(kuò)展性非常好。
5.報文發(fā)送:
即 spring-messaging 模塊。
spring-messaging 是從 Spring4 開始新加入的一個模塊,主要職責(zé)是為 Spring 框架集成一些基
礎(chǔ)的報文傳送應(yīng)用。
6.Test:
即 spring-test 模塊。
spring-test 模塊主要為測試提供支持的,畢竟在不需要發(fā)布(程序)到你的應(yīng)用服務(wù)器或者連接
到其他企業(yè)設(shè)施的情況下能夠執(zhí)行一些集成測試或者其他測試對于任何企業(yè)都是非常重要的。
3.7、Spirng 各模塊之間的依賴關(guān)系
該圖是 Spring5 的包結(jié)構(gòu),可以從中清楚看出 Spring 各個模塊之間的依賴關(guān)系

如果你想加入 Spring 源碼的學(xué)習(xí),建議是從 spring-core 入手,其次是 spring-beans 和
spring-aop,隨后是 spring-context,再其次是 spring-tx 和 spring-orm,最后是 spring-web
和其他部分。
來源:http://www./content-4-143351.html
|