您的位置:首頁(yè) > 軟件教程 > 教程 > 理解Spring AOP的XML配置

理解Spring AOP的XML配置

來(lái)源:好特整理 | 時(shí)間:2024-05-13 11:59:01 | 閱讀:87 |  標(biāo)簽: 角度 Ri S in 配置   | 分享到:

本文是全面解析面向切面編程的實(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ù)管理、日志記錄等)。

1. Spring AOP與動(dòng)態(tài)代理

1.1 Spring AOP和動(dòng)態(tài)代理的關(guān)系

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í)行的不同階段插入附加行為。

1.2 AOP基本術(shù)語(yǔ)

切面(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í)行。
  • 環(huán)繞通知( 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)

小編推薦閱讀

好特網(wǎng)發(fā)布此文僅為傳遞信息,不代表好特網(wǎng)認(rèn)同期限觀點(diǎn)或證實(shí)其描述。

角度 1.3
角度 1.3
類(lèi)型:休閑益智  運(yùn)營(yíng)狀態(tài):正式運(yùn)營(yíng)  語(yǔ)言:中文   

游戲攻略

游戲禮包

游戲視頻

游戲下載

游戲活動(dòng)

《角度》(AngL)是一款簡(jiǎn)潔風(fēng)格的益智類(lèi)游戲。游戲中,玩家將通過(guò)反射的方式來(lái)讓小球到達(dá)鉆石處,并途中
RPG Ri序章 0.2.1
RPG Ri序章 0.2.1
類(lèi)型:角色扮演  運(yùn)營(yíng)狀態(tài):正式運(yùn)營(yíng)  語(yǔ)言: 日文  

游戲攻略

游戲禮包

游戲視頻

游戲下載

游戲活動(dòng)

《RPG_Ri序章》是GameMaker'Child-Dream'制作的一款幻想廢土風(fēng)RPG手游,完全免費(fèi)的幻想廢土風(fēng)RPG登場(chǎng)!元

相關(guān)視頻攻略

更多

掃二維碼進(jìn)入好特網(wǎng)手機(jī)版本!

掃二維碼進(jìn)入好特網(wǎng)微信公眾號(hào)!

本站所有軟件,都由網(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)