本文是全面解析面向切面編程的實(shí)踐指南。通過(guò)深入講解切面、連接點(diǎn)、通知等關(guān)鍵概念,以及通過(guò)XML配置實(shí)現(xiàn)Spring AOP的步驟。
本文分享自華為云社區(qū)《Spring高手之路18——從XML配置角度理解Spring AOP》,作者: 磚業(yè)洋__。
Spring AOP使用動(dòng)態(tài)代理作為其主要機(jī)制來(lái)實(shí)現(xiàn)面向切面的編程。這種機(jī)制允許Spring在運(yùn)行時(shí)動(dòng)態(tài)地創(chuàng)建代理對(duì)象,這些代理對(duì)象包裝了目標(biāo)對(duì)象(即業(yè)務(wù)組件),以便在調(diào)用目標(biāo)對(duì)象的方法前后插入額外的行為(如安全檢查、事務(wù)管理、日志記錄等)。
Spring AOP
使用動(dòng)態(tài)代理作為其主要機(jī)制來(lái)實(shí)現(xiàn)面向切面的編程。這種機(jī)制允許
Spring
在運(yùn)行時(shí)動(dòng)態(tài)地創(chuàng)建代理對(duì)象,這些代理對(duì)象包裝了目標(biāo)對(duì)象(即業(yè)務(wù)組件),以便在調(diào)用目標(biāo)對(duì)象的方法前后插入額外的行為(如安全檢查、事務(wù)管理、日志記錄等)。
JDK動(dòng)態(tài)代理:當(dāng)目標(biāo)對(duì)象實(shí)現(xiàn)了一個(gè)或多個(gè)接口時(shí),
Spring AOP
默認(rèn)使用
JDK
的動(dòng)態(tài)代理。
JDK
動(dòng)態(tài)代理通過(guò)反射機(jī)制,為接口創(chuàng)建一個(gè)代理對(duì)象,這個(gè)代理對(duì)象會(huì)攔截對(duì)目標(biāo)接口方法的所有調(diào)用。
CGLIB代理:如果目標(biāo)對(duì)象沒(méi)有實(shí)現(xiàn)任何接口,
Spring AOP
會(huì)退回到使用
CGLIB
庫(kù)生成目標(biāo)類(lèi)的子類(lèi)。
CGLIB
(
Code Generation Library
)是一個(gè)強(qiáng)大的高性能代碼生成庫(kù),它在運(yùn)行時(shí)擴(kuò)展了
Java
類(lèi),并在子類(lèi)中覆蓋了方法來(lái)實(shí)現(xiàn)方法攔截。
無(wú)論使用哪種代理方式,目的都是在不改變?cè)袠I(yè)務(wù)邏輯代碼的基礎(chǔ)上,通過(guò)切面定義的通知在方法執(zhí)行的不同階段插入附加行為。
切面(Aspect):切面是面向切面編程的核心,它是將橫跨多個(gè)類(lèi)的關(guān)注點(diǎn)(如日志記錄、事務(wù)管理等)模塊化的構(gòu)造。一個(gè)切面可以包含多種類(lèi)型的通知(
Advice
)和一個(gè)或多個(gè)切點(diǎn)(
Pointcut
),用于定義在何處以及何時(shí)執(zhí)行這些通知。
連接點(diǎn)(Join Point):連接點(diǎn)代表程序執(zhí)行過(guò)程中的某個(gè)特定位置,
Spring AOP
限定這些位置為方法的調(diào)用。簡(jiǎn)而言之,連接點(diǎn)就是能夠插入切面通知的點(diǎn)。
通知(Advice):通知定義了切面在連接點(diǎn)上要執(zhí)行的動(dòng)作。根據(jù)通知類(lèi)型的不同,這些動(dòng)作可以在方法調(diào)用之前、之后、返回結(jié)果后或拋出異常時(shí)執(zhí)行。
Before advice
):在方法執(zhí)行之前執(zhí)行。
After advice
):在方法執(zhí)行后執(zhí)行,無(wú)論其結(jié)果如何。
After-returning advice
):在方法成功執(zhí)行之后執(zhí)行。
After-throwing advice
):在方法拋出異常后執(zhí)行。
Around advice
):在方法執(zhí)行之前和之后執(zhí)行,提供對(duì)方法調(diào)用的全面控制。
切點(diǎn)(Pointcut):切點(diǎn)是一個(gè)表達(dá)式,切點(diǎn)表達(dá)式允許通過(guò)方法名稱(chēng)、訪問(wèn)修飾符等條件來(lái)匹配連接點(diǎn),決定了通知應(yīng)該在哪些方法執(zhí)行時(shí)觸發(fā)。
目標(biāo)對(duì)象(Target Object):被一個(gè)或多個(gè)切面所通知的對(duì)象。也被稱(chēng)為被代理對(duì)象。
AOP代理(AOP Proxy):
AOP
框架創(chuàng)建的對(duì)象,用于實(shí)現(xiàn)切面契約(由通知和切點(diǎn)定義)。在
Spring AOP
中,
AOP
代理可以是
JDK
動(dòng)態(tài)代理或
CGLIB
代理。
引入(Introduction):引入允許向現(xiàn)有的類(lèi)添加新的方法或?qū)傩浴_@是通過(guò)定義一個(gè)或多個(gè)附加接口(
Introduction interfaces
)實(shí)現(xiàn)的,
AOP
框架會(huì)為目標(biāo)對(duì)象創(chuàng)建一個(gè)代理,該代理實(shí)現(xiàn)這些接口。
如果還是覺(jué)得抽象,我們?cè)倥e一個(gè)電影制作的例子來(lái)類(lèi)比
切面(Aspect)
小編推薦閱讀機(jī)器學(xué)習(xí):神經(jīng)網(wǎng)絡(luò)構(gòu)建(下)
閱讀華為Mate品牌盛典:HarmonyOS NEXT加持下游戲性能得到充分釋放
閱讀實(shí)現(xiàn)對(duì)象集合與DataTable的相互轉(zhuǎn)換
閱讀鴻蒙NEXT元服務(wù):論如何免費(fèi)快速上架作品
閱讀算法與數(shù)據(jù)結(jié)構(gòu) 1 - 模擬
閱讀升訊威在線客服與營(yíng)銷(xiāo)系統(tǒng)介紹
閱讀基于鴻蒙NEXT的血型遺傳計(jì)算器開(kāi)發(fā)案例
閱讀5. Spring Cloud OpenFeign 聲明式 WebService 客戶端的超詳細(xì)使用
閱讀Java代理模式:靜態(tài)代理和動(dòng)態(tài)代理的對(duì)比分析
閱讀Win11筆記本“自動(dòng)管理應(yīng)用的顏色”顯示規(guī)則
閱讀本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請(qǐng)發(fā)郵件[email protected]
湘ICP備2022002427號(hào)-10 湘公網(wǎng)安備:43070202000427號(hào)© 2013~2025 haote.com 好特網(wǎng)