Spring-AOP-ProceedingJoinPoint的使用詳解
ProceedingJoinPoint簡(jiǎn)介
在Spring AOP中,ProceedingJoinPoint是JoinPoint的子接口,它專(zhuān)門(mén)用于環(huán)繞通知(Around advice)。
ProceedingJoinPoint包含了被通知方法的執(zhí)行信息,同時(shí)可以訪(fǎng)問(wèn)被通知方法的信息和參數(shù)。
可以通過(guò)使用ProceedingJoinPoint接口來(lái)實(shí)現(xiàn)更加靈活和精細(xì)的環(huán)繞通知邏輯。
獲取環(huán)繞通知方法的相關(guān)信息
ProceedingJoinPoint接口提供了以下常用方法:
1.proceed()
這是ProceedingJoinPoint接口中最重要的方法。
在環(huán)繞通知中,調(diào)用proceed()方法會(huì)繼續(xù)執(zhí)行被通知的方法。
如果環(huán)繞通知中不調(diào)用proceed()方法,被通知的方法將不會(huì)執(zhí)行。
@Around("execution(* com.example.service.*.*(..))") public Object aroundMethod(ProceedingJoinPoint joinPoint) throws Throwable { // 執(zhí)行前置邏輯 Object result = joinPoint.proceed(); // 繼續(xù)執(zhí)行被通知的方法 // 執(zhí)行后置邏輯 return result; }
注意joinPoint.proceed()
方法是可能有返回值的,返回值類(lèi)型可能有很多,可以直接設(shè)置為Object類(lèi)型
2.getArgs()
獲取被通知方法的參數(shù)數(shù)組
Object[] args = joinPoint.getArgs();
3.getTarget()
獲取被通知的目標(biāo)對(duì)象
Object target = joinPoint.getTarget();
ProceedingJoinPoint接口的主要作用是在環(huán)繞通知中控制被通知方法的執(zhí)行,同時(shí)可以訪(fǎng)問(wèn)被通知方法的信息和參數(shù)。
開(kāi)發(fā)人員可以通過(guò)使用ProceedingJoinPoint接口來(lái)實(shí)現(xiàn)更加靈活和精細(xì)的環(huán)繞通知邏輯
總結(jié)
JoinPoint用于獲取方法的信息,而ProceedingJoinPoint除了能獲取方法的信息外,還可以控制方法的執(zhí)行,這使得它在環(huán)繞通知中非常有用。
在AOP的實(shí)踐中,開(kāi)發(fā)人員需要理解這兩個(gè)接口的使用方式,并根據(jù)具體的需求選擇合適的接口來(lái)實(shí)現(xiàn)橫切關(guān)注點(diǎn)的功能。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- SpringAop的依賴(lài)注入方式
- SpringBoot實(shí)現(xiàn)動(dòng)態(tài)插拔的AOP的完整案例
- Spring AOP方法內(nèi)部調(diào)用不生效的解決方案
- 基于Spring AOP實(shí)現(xiàn)日志自動(dòng)打印功能
- 使用Spring AOP做接口權(quán)限校驗(yàn)和日志記錄
- Spring AOP常見(jiàn)使用場(chǎng)景、術(shù)語(yǔ)及設(shè)計(jì)模式應(yīng)用方式
- SpringBoot中使用AOP切面編程實(shí)現(xiàn)登錄攔截功能
- SpringAop攔截參數(shù)帶注解的方法
相關(guān)文章
淺談Java后臺(tái)對(duì)JSON格式的處理操作
下面小編就為大家?guī)?lái)一篇淺談Java后臺(tái)對(duì)JSON格式的處理操作。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06Spring中@Autowired、@Qualifier、@Resource注解的區(qū)別
這篇文章主要介紹了Spring中@Autowired、@Qualifier、@Resource注解的區(qū)別,@Autowired 可以單獨(dú)使用,如果單獨(dú)使用,它將按類(lèi)型裝配,因此,如果在容器中聲明了多個(gè)相同類(lèi)型的bean,則會(huì)出現(xiàn)問(wèn)題,因?yàn)?nbsp;@Autowired 不知道要使用哪個(gè)bean來(lái)注入,需要的朋友可以參考下2023-11-11使用springCloud+nacos集成seata1.3.0搭建過(guò)程
這篇文章主要介紹了使用springCloud+nacos集成seata1.3.0搭建過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08MyBatis入門(mén)實(shí)例教程之創(chuàng)建一個(gè)簡(jiǎn)單的程序
這篇文章主要介紹了MyBatis入門(mén)創(chuàng)建一個(gè)簡(jiǎn)單的程序,在?MySQL?中創(chuàng)建數(shù)據(jù)庫(kù)?mybatisdemo,編碼為?utf8,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-02-02Java Netty實(shí)現(xiàn)心跳機(jī)制過(guò)程解析
這篇文章主要介紹了Java Netty實(shí)現(xiàn)心跳機(jī)制過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03SpringBoot入門(mén)編寫(xiě)第一個(gè)程序Helloworld
這篇文章是Springboot入門(mén)篇,來(lái)教大家編寫(xiě)第一個(gè)Springboot程序Helloworld,文中附有詳細(xì)的示例代碼,有需要的同學(xué)可以借鑒參考下2021-09-09mybatis調(diào)用存儲(chǔ)過(guò)程,帶in、out參數(shù)問(wèn)題
這篇文章主要介紹了mybatis調(diào)用存儲(chǔ)過(guò)程,帶in、out參數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01