Spring 框架各模塊的特性及使用的編程模型
Spring各模塊及特性
以下內(nèi)容使用版本為 Spring Framework 5.2.13 RELEASE,模塊名稱都為簡寫,如 aop 等同于 spring-aop模塊
-
aop,面向接口或者切面編程
aopalliance,AOP的核心advice標(biāo)識(shí)和抽象反射攔截。
aop,AOP的核心
-
aspects,spring對aspects的支持
包含 beans、cache、context annotation、scheduling、transacation
-
beans和contexts(涉及三個(gè)模塊 context、context-indexer、context-support),兩個(gè)模塊合起來是Spring IOC的重要核心實(shí)現(xiàn),前提是兩者都依賴core模塊
beans,包含操作Java bean的接口和類。
context,包含cache、context、ejb、format、jndi等等相關(guān)包以及相關(guān)內(nèi)容。
indexer,用于讀取和管理組件索引
support,包含cache、mail、scheduling、ui freemarker相關(guān)包以及相關(guān)內(nèi)容。
-
core,核心模塊,包含對 Java 語法支持等等
主要包含對asm、cglib、core、lang、objenesis、util的支持
expression,Spring應(yīng)用程序上下文中表達(dá)式語言的解析支持,從 Spring 3 開始引入,類似jsp的EL語言
instrument,從Spring 2 開始支持 Java的裝配,以及對 Java agent的支持
jcl,從 Spring 5 開始,是 Spring 新型的日志框架,用來幫助 Spring 進(jìn)行統(tǒng)一的日志管理
jdbc,JDBC相關(guān)內(nèi)容,Spring 對JDBC的包裝,使JDBC更加容易使用,并減少了常見錯(cuò)誤的可能性
jms,Java message service,即 Java 消息服務(wù),Spring 希望通過 api 方式來實(shí)現(xiàn) Java message 的統(tǒng)一實(shí)現(xiàn)。
messaging,Spring 針對消息服務(wù)的統(tǒng)一實(shí)現(xiàn),有對應(yīng)的API 和實(shí)現(xiàn),包括 kakfa ,rabbitmq,rocketmq等
orm,O/R Mapping集成類的根目錄,包含 Spring 對 jpa 或 hibernate 等整合實(shí)現(xiàn),
oxm,O/X Mapping集成類的根目錄,xml的編列,marshal 和 unmarshal,是xml的序列化和反序列化
test,測試,包含了mock、testcontext、springmvc 和 webclient 的測試,一般不需要日常maven引入,或者代碼里可以通過<scope>來排除
tx ,transaction,Spring的事務(wù)抽象,借鑒了 JavaEE 中 jpa 的事務(wù)實(shí)現(xiàn)和 jdbc 的事務(wù)實(shí)現(xiàn),來統(tǒng)一封裝事務(wù)。
-
web
http,HTTP客戶端和服務(wù)端的抽象
remoting,Spring 遠(yuǎn)程處理
web , 公共的、通用接口,用于定義Spring的Web基礎(chǔ)架構(gòu)和其他框架模塊之間的最小邊界點(diǎn)。
webflux,其中包含DispatcherHandler,這是WebFlux服務(wù)器端點(diǎn)處理的主要入口點(diǎn),包括用于將請求映射到處理程序,調(diào)用它們并處理結(jié)果的關(guān)鍵協(xié)定。
webmvc,提供應(yīng)用程序上下文、Spring Web MVC框架的核心接口和類集成的servlet。
websocket,websocket相關(guān)的通用抽象和Spring 配置
Spring 中用到的編程模型
面向?qū)ο缶幊?/h5>
- 契約接口:Aware、BeanPostProcessor……
Aware:接口處理,大部分接口繼承并加入對應(yīng)的set*方法,如ApplicationContextAware、BeanFactoryAware
BeanPostProcessor :Bean生命周期的后置處理,里面運(yùn)用了 Java 8 的 default 方法實(shí)現(xiàn)
- 設(shè)計(jì)模式:觀察者模式、組合模式、模板模式……
觀察者模式:ApplicationEvent,基于Java Event實(shí)現(xiàn)
組合模式:Composite
模板模式:JdbcTemplate
- 對象繼承:Abstract* 類,Spring 中有很多抽象類
面向切面編程
動(dòng)態(tài)代理:JdkDynamicAopProxy
字節(jié)碼提升:ASM、CGlib、AspectJ
面向元編程
- 注解:模式注解(@Component、@Service、@Respository...)
java 語言規(guī)范注解之間不能有繼承關(guān)系,所以 Spring 中很多注解都是派生的關(guān)系
@Component:組件,@Respository/@Service/@Controller都是@Component的派生注解
- 配置: Environment抽象、PropertySources、BeanDefinition...
- Environment抽象:
- 從 Spring 3.1 開始引入,包含一些 Profiles,profile 可以認(rèn)為是用戶配置,可以對不同系統(tǒng)進(jìn)行區(qū)分,如開發(fā)是 dev,生產(chǎn)環(huán)境是 prod
- 包含一些屬性,通過 PropertyResolver 中的 getProperty 來獲取
- 泛型:GenericTypeResolver、ResolvableType...
- ResolvableType
函數(shù)驅(qū)動(dòng)
- 函數(shù)接口:ApplicationEventPublisher
Java 中的函數(shù)接口是 FunctionalInterface
Spring的函數(shù)接口有且僅有一個(gè)抽象方法,不包含Object中的方法以及default的實(shí)現(xiàn)
- Reactive:Spring WebFlux
- WebFlux:
模塊驅(qū)動(dòng)
Maven Artifacts
OSGI Bundles
Java 9 Automatic Modules
Spring @Enable*
Aware:接口處理,大部分接口繼承并加入對應(yīng)的set*方法,如ApplicationContextAware、BeanFactoryAware
BeanPostProcessor :Bean生命周期的后置處理,里面運(yùn)用了 Java 8 的 default 方法實(shí)現(xiàn)
觀察者模式:ApplicationEvent,基于Java Event實(shí)現(xiàn)
組合模式:Composite
模板模式:JdbcTemplate
動(dòng)態(tài)代理:JdkDynamicAopProxy
字節(jié)碼提升:ASM、CGlib、AspectJ
java 語言規(guī)范注解之間不能有繼承關(guān)系,所以 Spring 中很多注解都是派生的關(guān)系
@Component:組件,@Respository/@Service/@Controller都是@Component的派生注解
- 從 Spring 3.1 開始引入,包含一些 Profiles,profile 可以認(rèn)為是用戶配置,可以對不同系統(tǒng)進(jìn)行區(qū)分,如開發(fā)是 dev,生產(chǎn)環(huán)境是 prod
- 包含一些屬性,通過 PropertyResolver 中的 getProperty 來獲取
Java 中的函數(shù)接口是 FunctionalInterface
Spring的函數(shù)接口有且僅有一個(gè)抽象方法,不包含Object中的方法以及default的實(shí)現(xiàn)
Maven Artifacts
OSGI Bundles
Java 9 Automatic Modules
Spring @Enable*