最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring AOP 中 JoinPoint 使用詳解

 更新時(shí)間:2026年02月11日 09:35:03   作者:Knight_AL  
JoinPoint是Spring AOP中獲取方法運(yùn)行時(shí)信息的核心接口,可以獲取方法參數(shù)、類名、方法名、Method對(duì)象、注解等,下面就來(lái)介紹一下Spring AOP  JoinPoint 使用,感興趣的可以了解一下

一、什么是 JoinPoint?

在 Spring AOP 中,JoinPoint 表示的是:

一個(gè)方法執(zhí)行的切入點(diǎn)(連接點(diǎn)),包含當(dāng)前方法調(diào)用的全部運(yùn)行時(shí)信息。

你可以把它理解成:

Spring AOP 告訴你:我要執(zhí)行這個(gè)方法了,你要不要看看它是誰(shuí)?參數(shù)是什么?類是誰(shuí)?用的是什么注解?

二、JoinPoint 能獲取哪些信息?

能獲取的內(nèi)容使用方法
方法參數(shù)joinPoint.getArgs()
目標(biāo)對(duì)象(真實(shí)類)joinPoint.getTarget()
代理對(duì)象(AOP 生成)joinPoint.getThis()
方法名joinPoint.getSignature().getName()
類名joinPoint.getTarget().getClass()
方法簽名MethodSignature
方法本體 Method((MethodSignature) jp.getSignature()).getMethod()
方法上的注解method.getAnnotation(XXX.class)

這些能力構(gòu)成了 AOP 一切高級(jí)玩法:冪等、防重復(fù)提交、權(quán)限校驗(yàn)、操作日志、審計(jì)…… 全靠 JoinPoint 取參數(shù)和注解。

三、獲取方法參數(shù)(最常用)

Object[] args = joinPoint.getArgs();
System.out.println(JSON.toJSONString(args));

輸出:

[{"name":"Tom","age":18}]

適用場(chǎng)景:

  • 接口日志打印
  • 冪等簽名(根據(jù)參數(shù)生成 Key)
  • 參數(shù)校驗(yàn)
  • 審計(jì)記錄

四、獲取類名 + 方法名

String className = joinPoint.getTarget().getClass().getName();
String methodName = joinPoint.getSignature().getName();

System.out.println(className + "." + methodName);

輸出:

com.demo.controller.UserController.createOrder

適用場(chǎng)景:

  • 記錄接口訪問日志
  • 記錄方法調(diào)用來(lái)源
  • 記錄操作審計(jì)行為

五、獲取 Method 對(duì)象(獲取注解的必備步驟)

JoinPoint 獲取 Method 的正確方式:

MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();

拿到 Method 后你可以做什么?

六、獲取方法上的注解(非常常用)

在冪等、權(quán)限控制、操作日志等 AOP 場(chǎng)景中,你都會(huì)在方法上寫注解:

@PostMapping("/order/create")
@RepeatSubmit(interval = 5000)
public R createOrder(@RequestBody OrderDTO dto) {
    return R.ok();
}

在 AOP 內(nèi)獲取注解:

RepeatSubmit repeatSubmit = method.getAnnotation(RepeatSubmit.class);
int interval = repeatSubmit.interval();

這就是 AOP 注解驅(qū)動(dòng)業(yè)務(wù)的核心。

七、完整示例:通過(guò) JoinPoint 實(shí)現(xiàn)冪等簽名生成

@Before("@annotation(repeatSubmit)")
public void before(JoinPoint joinPoint, RepeatSubmit repeatSubmit) {

    // 獲取 URI
    HttpServletRequest request =
        ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
    String uri = request.getRequestURI();

    // 獲取參數(shù)
    String params = JSON.toJSONString(joinPoint.getArgs());

    // 獲取方法本體
    MethodSignature signature = (MethodSignature) joinPoint.getSignature();
    Method method = signature.getMethod();

    // 獲取注解內(nèi)容
    RepeatSubmit anno = method.getAnnotation(RepeatSubmit.class);
    long interval = anno.interval();

    System.out.println("訪問接口:" + uri);
    System.out.println("參數(shù):" + params);
    System.out.println("注解配置間隔:" + interval + " ms");
}

輸出類似:

這就是 JoinPoint 在冪等邏輯中最常用的三件事:

  1. 獲取參數(shù)
  2. 獲取方法信息
  3. 獲取注解配置

八、JoinPoint 的典型應(yīng)用場(chǎng)景

場(chǎng)景JoinPoint 的作用
防重復(fù)提交(冪等)獲取參數(shù) + 獲取注解配置
業(yè)務(wù)操作日志獲取類名、方法名、參數(shù)
統(tǒng)一異常記錄獲取方法名、參數(shù)
接口權(quán)限校驗(yàn)獲取注解權(quán)限標(biāo)識(shí)
慢接口報(bào)警方法計(jì)時(shí)
分布式鎖標(biāo)識(shí)生成參數(shù)簽名

說(shuō)白了:

只要你需要知道“當(dāng)前被調(diào)用的方法是哪個(gè)?參數(shù)是什么?注解是什么?”就必須用 JoinPoint。

九、總結(jié)

  • JoinPoint 是 Spring AOP 中獲取方法運(yùn)行時(shí)信息的核心接口
  • 它能獲取方法參數(shù)、類名、方法名、Method 對(duì)象、注解
  • 是參數(shù)校驗(yàn)、日志、冪等、防重復(fù)提交、權(quán)限控制等 AOP 功能的基礎(chǔ)
  • 獲取注解必須先通過(guò) MethodSignature 得到 Method
  • 冪等、防重復(fù)提交中最常用的能力就是:joinPoint.getArgs() + 獲取注解配置

一句話總結(jié):

JoinPoint 是 AOP 的“方法上下文”。只要你需要基于注解或參數(shù)做業(yè)務(wù),就離不開它。

到此這篇關(guān)于Spring AOP 中 JoinPoint 使用詳解的文章就介紹到這了,更多相關(guān)Spring AOP  JoinPoint 使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Dubbo Service Mesh基礎(chǔ)架構(gòu)組件改造

    Dubbo Service Mesh基礎(chǔ)架構(gòu)組件改造

    Service Mesh這個(gè)“熱”詞是2016年9月被“造”出來(lái),而今年2018年更是被稱為service Mesh的關(guān)鍵之年,各家大公司都希望能在這個(gè)思潮下領(lǐng)先一步
    2023-03-03
  • java中hibernate二級(jí)緩存詳解

    java中hibernate二級(jí)緩存詳解

    本篇文章中主要介紹了java中hibernate二級(jí)緩存詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • 使用Spring Data MongoDB進(jìn)行地理位置相關(guān)查詢的步驟和示例

    使用Spring Data MongoDB進(jìn)行地理位置相關(guān)查詢的步驟和示例

    SpringData MongoDB是SpringData技術(shù)封裝了mongodb-driver技術(shù)之后的產(chǎn)物,它可以用更加簡(jiǎn)單的方式操作MongoDB,本文給大家介紹了如何使用Spring Data MongoDB進(jìn)行地理位置相關(guān)查詢的步驟和示例,需要的朋友可以參考下
    2025-05-05
  • Java Math類、Random類、System類及BigDecimal類用法示例

    Java Math類、Random類、System類及BigDecimal類用法示例

    這篇文章主要介紹了Java Math類、Random類、System類及BigDecimal類用法,結(jié)合實(shí)例形式分析了java數(shù)值運(yùn)算相關(guān)的Math類、Random類、System類及BigDecimal類基本功能與使用技巧,需要的朋友可以參考下
    2019-03-03
  • java String 可變性的分析

    java String 可變性的分析

    這篇文章主要介紹了java String 可變性的分析的相關(guān)資料,通常大家都認(rèn)為java String 是不可變的,這里分析下源碼來(lái)說(shuō)明它的可變性,需要的朋友可以參考下
    2017-03-03
  • Java利用遺傳算法求解最短路徑問題

    Java利用遺傳算法求解最短路徑問題

    遺傳算法(Genetic Algorithm,GA)最早是由美國(guó)的John holland于20世紀(jì)70年代提出,該算法是根據(jù)大自然中生物體進(jìn)化規(guī)律而設(shè)計(jì)提出的。本文將利用遺傳算法求解最短路徑問題,需要的可以參考一下
    2022-06-06
  • mybatis?plus常用注解的具體使用

    mybatis?plus常用注解的具體使用

    本文主要介紹了mybatis?plus常用注解的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • Spring Boot 整合原生 WebSocket的實(shí)際操作

    Spring Boot 整合原生 WebSocket的實(shí)際操作

    文章介紹了WebSocket協(xié)議的基本概念、特點(diǎn)及在Spring Boot中的整合步驟,通過(guò)示例代碼和實(shí)際操作,展示了如何配置WebSocket處理器、握手?jǐn)r截器、會(huì)話管理和服務(wù)類,感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • CentOS8.2安裝Java 14.0.2的教程詳解

    CentOS8.2安裝Java 14.0.2的教程詳解

    這篇文章主要介紹了CentOS8.2安裝Java 14.0.2的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Spring Cloud gateway 網(wǎng)關(guān)如何攔截Post請(qǐng)求日志

    Spring Cloud gateway 網(wǎng)關(guān)如何攔截Post請(qǐng)求日志

    這篇文章主要介紹了Spring Cloud gateway 網(wǎng)關(guān)如何攔截Post請(qǐng)求日志的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評(píng)論

五河县| 太康县| 德化县| 山西省| 互助| 呼和浩特市| 叙永县| 吴旗县| 贺州市| 舒城县| 普宁市| 凤台县| 高台县| 马龙县| 会泽县| 晋中市| 礼泉县| 靖江市| 宾阳县| 高台县| 大同县| 霍山县| 延庆县| 万全县| 新建县| 罗山县| 鄂州市| 潮安县| 丹江口市| 淳化县| 施秉县| 敦煌市| 邢台市| 鄂伦春自治旗| 康保县| 霍州市| 故城县| 石景山区| 西乌| 页游| 三穗县|