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

Spring AOP 中 JoinPoint 使用詳解

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

一、什么是 JoinPoint?

在 Spring AOP 中,JoinPoint 表示的是:

一個方法執(zhí)行的切入點(連接點),包含當前方法調(diào)用的全部運行時信息。

你可以把它理解成:

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

二、JoinPoint 能獲取哪些信息?

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

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

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

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

輸出:

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

適用場景:

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

四、獲取類名 + 方法名

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

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

輸出:

com.demo.controller.UserController.createOrder

適用場景:

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

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

JoinPoint 獲取 Method 的正確方式:

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

拿到 Method 后你可以做什么?

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

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

@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ū)動業(yè)務的核心。

七、完整示例:通過 JoinPoint 實現(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 的典型應用場景

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

說白了:

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

九、總結(jié)

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

一句話總結(jié):

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

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

相關(guān)文章

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

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

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

    java中hibernate二級緩存詳解

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

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

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

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

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

    java String 可變性的分析

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

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

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

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

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

    Spring Boot 整合原生 WebSocket的實際操作

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

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

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

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

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

最新評論

区。| 天津市| 综艺| 辛集市| 白玉县| 河曲县| 汝州市| 峨边| 青阳县| 祁东县| 且末县| 凌海市| 类乌齐县| 泸州市| 山阳县| 武威市| 基隆市| 乌鲁木齐县| 慈溪市| 永吉县| 辉南县| 五台县| 大埔区| 贵阳市| 郑州市| 鄂伦春自治旗| 红安县| 鹤壁市| 昌图县| 基隆市| 年辖:市辖区| 普安县| 沂水县| 泽州县| 隆子县| 湘潭市| 定州市| 隆昌县| 乌拉特中旗| 巴彦淖尔市| 长武县|