Spring 的這七大模塊你了解嗎?
本文會(huì)和大家分享以下幾點(diǎn):point_down:
spring七大模塊-
模塊的主要作用
-
模塊間的依賴(lài)關(guān)系
- spring經(jīng)典面試題——什么是
Spring
Spring的七大模塊
那么先來(lái)看看這個(gè)圖回憶下 Spring 有哪些模塊吧
可以分成下面這 七大模塊 :point_down:
-
數(shù)據(jù)模塊( Data Access / Integration )
-
Web模塊
-
切面模塊( Aop , Aspects )
-
工具模塊( Instrumentation )
-
消息模塊
-
核心模塊
-
測(cè)試模塊
小結(jié)
后面文章重點(diǎn)會(huì)放在顏色深的模塊~ :smile:
數(shù)據(jù)模塊
數(shù)據(jù)訪(fǎng)問(wèn)與集成模塊, Data Access/Integration
在這個(gè)模塊中,有五個(gè)小模塊,分別是:point_down:
JDBC(Java Database Connectivity), Java數(shù)據(jù)庫(kù)連接ORM(Object Relational Mapping), 對(duì)象關(guān)系映射OXM(Object XML Mapping), 對(duì)象XML映射JMS(Java Message Service), Java消息服務(wù)Transactions, 事務(wù)
看了一眼下來(lái),發(fā)現(xiàn)最常用的應(yīng)該就是這個(gè) ORM 和 Transactions ,而這個(gè) JMS 和 JDBC 差不多,都提供了相應(yīng)的模板,也是很少用到了,最后這個(gè) OXM 都沒(méi)點(diǎn)印象的:joy:
小結(jié)
星號(hào)的是重點(diǎn)模塊~:pig:
Web模塊
這里有四個(gè)模塊:point_down:
-
Web
-
WebMVC
-
WebSocket
-
WebFlux
Web 模塊提供了核心部分,如 編解碼,過(guò)濾器,序列化,國(guó)際化,跨域,轉(zhuǎn)換器,客戶(hù)端和服務(wù)端等等
WebMVC 模塊即我們平時(shí)用的 SpringMVC
WebSocket 模塊用來(lái)支持這個(gè) 全雙工通信
WebFlux模塊就是這個(gè) 響應(yīng)式Web編程模塊 ,可以參考下圖:point_down:
小結(jié)
切面模塊
這里有大名鼎鼎的 AOP 和 Aspects
Aop : Aspect Oriented Programming , 面向切面編程 ,是對(duì) OOP 的補(bǔ)充
Aspects :切面
不知道小伙伴們看到這里有沒(méi)有犯迷糊~, 這里居然是兩個(gè)模塊,我一直以為只有 AOP 這個(gè)模塊:pig2:
簡(jiǎn)單說(shuō)明下這兩個(gè)模塊的不同:point_down:
Spring AOP 是一個(gè) 基于代理的 Aop 框架 ,日常使用比較多的
Spring Aspects 模塊里面則定義了五種類(lèi)型的切面,如下:point_down:
關(guān)于代理可以看看 4ye 之前寫(xiě)的這兩篇文章~
-
:point_right: 《Java代理模式和字節(jié)碼的探索》
-
:point_right: 《Cglib動(dòng)態(tài)代理探索(ASM,Spring)》
小結(jié)
工具模塊
Instrumentation , 這個(gè)是 Java 的一個(gè)接口,可以用來(lái)做
-
監(jiān)控代理
-
事件日志記錄
-
代碼覆蓋率
Examples of such benign tools include monitoring agents, profilers, coverage analyzers, and event loggers. —— 來(lái)自該接口的注釋
還沒(méi)用過(guò)呢:pig2:
這個(gè) AspectJ 的 LTW(load-time-weaver) 就是通過(guò)該方式來(lái)進(jìn)行 切面織入 的
消息模塊
Spring-messaging 模塊提供了一種基于 WebSocket 的 STOMP 協(xié)議實(shí)現(xiàn)
STOMP ( Simple Text Oriented Messaging Protocol ) 是一種 流文本定向消息協(xié)議 ,也是一種為 MOM(Message Oriented Middleware,面向消息的中間件 )設(shè)計(jì)的簡(jiǎn)單文本協(xié)議
常見(jiàn)的這幾個(gè)MQ都支持該協(xié)議,比如 RocketMQ , RabbitMQ , ActiveMQ
我們可以通過(guò) Spring 官網(wǎng)的例子上手這個(gè)模塊,大概如下:point_down:
簡(jiǎn)單版
啟用簡(jiǎn)單內(nèi)置消息代理時(shí)使用的組件
進(jìn)階版
對(duì)接外部 MQ 來(lái)實(shí)現(xiàn)這個(gè) 廣播,訂閱 等
核心模塊
來(lái)到 Spring 最核心的部分,這里有我們熟悉的 控制反轉(zhuǎn) (Inversion of Control, IOC ) 和 依賴(lài)注入 ( Dependency Injection, DI )
這里有四個(gè) 核心模塊 :point_down:
-
Beans
-
Core
-
Context
-
Expression
每一個(gè)模塊都很重要,這里先列幾個(gè)大家熟悉的 Bean
比如:
- BeanFactory
- Beans
- IOC
- StopWatch
- Core
- Spring
- Spring
ApplicationContext 在 Context 模塊中 , 核心接口ParserContext 就在 Expression 模塊中,里面定了這個(gè) EL表達(dá)式 的默認(rèn)前綴 #{ , 后綴 }小結(jié)
大概有這么些內(nèi)容
測(cè)試模塊
這里有 Mock , Junit 等,就不多介紹先:pig:
源碼依賴(lài)圖
根據(jù) Spring 源碼模塊中的 gradle 依賴(lài),可以整理出這么一張 依賴(lài)關(guān)系圖 :point_down:
什么是Spring?
這里分享下 4ye 滴思路:pig2:
Spring 是一個(gè)輕量級(jí)框架,有七大模塊,分別為 數(shù)據(jù),Web,切面,工具,消息,核心,測(cè)試
總共 20 幾個(gè)小模塊
-
核心模塊有 Beans,Core,Context,Expression , IOC 和 DI:star:
-
切面模塊主要有 AOP ,涉及到這個(gè) AOP 編程 :star:
-
Web模塊有 Web,WebMVC, WebSocket, WebFlux
-
數(shù)據(jù)模塊主要有 ORM ,TX
方便擴(kuò)展,比如 郵件,緩存,定時(shí)任務(wù)等模塊
總結(jié)
本期介紹了這七大模塊,以及各模塊間的依賴(lài),作用
4ye已經(jīng)將本期內(nèi)容整理成了一個(gè)思維導(dǎo)圖,有需要的小伙伴訪(fǎng)問(wèn)該地址自行保存就可以啦:smile:
(圖片太大了,被壓縮后看不清了 )
https://processon.com/chart_image/611d2098f346fb37da73b8e1.png



































