欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

spring @AfterReturning返回值問題

 更新時(shí)間:2024年05月10日 10:21:25   作者:巴中第一皇子  
這篇文章主要介紹了spring @AfterReturning返回值問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

spring @AfterReturning返回值

@AfterReturning是用于做aop的,其中返回值的問題,坑了我比較久,特地寫出來。

1. 正確的使用

@AfterReturning(value = "pointCut()", returning = "obj")
public Object doAfterReturning(JoinPoint joinPoint, Object obj) {
    // 正常情況下,我們想要修改obj,只需要強(qiáng)轉(zhuǎn)為對應(yīng)的對象,再重新設(shè)置值即可,如下
    User user = (User)obj;
    user.setName("test");
    return user;
}

2. 錯(cuò)誤的使用

@AfterReturning(value = "pointCut()", returning = "obj")
public Object doAfterReturning(JoinPoint joinPoint, Object obj) {
    // 直接修改了obj的引用地址
    User user = new User();
    obj = user;
    return obj;
}

區(qū)別就是方式一并沒有更改obj的引用指針地址,返回結(jié)果是更新了name屬性后的用戶

而方式二更改了obj引用指針,返回結(jié)果并不是新new的user對象,而是入?yún)bj對象

所以使用時(shí)要注意:

AfterReturning方法雖然能修改返回值,但是局限于相同的對象地址,即最后返回對象的引用地址和入?yún)⒌囊玫刂繁仨毾嗤?/p>

所以能修改返回值的也只有引用類型,基本類型是不允許的

@AfterReturning方法執(zhí)行了,但是切入方法沒執(zhí)行

首先,在一個(gè)批量插入的方法定義了切入點(diǎn)

    @Pointcut(value = "execution(* com.cases.dao.mapper.duty.DutyTableDao.insertBatch(..))")
    public void pointcut() {
        log.info("DutyDeleteInterceptor:pointcut");
    }

@AfterReturning方法可以正常進(jìn)入,但是批量插入insertBatch方法卻沒有執(zhí)行。

原因就在@Around注解方法

這是原來的代碼

@Around(value = "pointcut()")
public void methodAround(ProceedingJoinPoint joinPoint) throws Throwable {
    log.info("DutyDeleteInterceptor:methodAround");
}

修改后的代碼

    @Around(value = "pointcut()")
    public Object methodAround(ProceedingJoinPoint joinPoint) throws Throwable {
        log.info("DutyDeleteInterceptor:methodAround");
        return joinPoint.proceed();
    }

調(diào)試,成功。

小知識:

 joinPoint.proceed() 的返回值是Object類型,Object result = joinPoint.proceed();

其實(shí)這句代碼的意思就是正常去執(zhí)行我們的業(yè)務(wù),返回值result,在錯(cuò)誤代碼中,返回值寫成了void,所以正常業(yè)務(wù)拿不到返回值了

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java多線程讀取多個(gè)文件的方法

    java多線程讀取多個(gè)文件的方法

    這篇文章主要為大家詳細(xì)介紹了java多線程讀取多個(gè)文件的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • 解決mybatisPlus 中的field-strategy配置失效問題

    解決mybatisPlus 中的field-strategy配置失效問題

    這篇文章主要介紹了解決mybatisPlus 中的field-strategy配置失效問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • 基于jenkins實(shí)現(xiàn)發(fā)布node.js項(xiàng)目

    基于jenkins實(shí)現(xiàn)發(fā)布node.js項(xiàng)目

    這篇文章主要介紹了基于jenkins實(shí)現(xiàn)發(fā)布node.js項(xiàng)目,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Java如何替換字符

    Java如何替換字符

    文章介紹了Java中String類的replace()方法及其變體replaceFirst()的使用,包括如何替換單個(gè)字符、第一次出現(xiàn)的字符以及多個(gè)字符,通過示例展示了如何處理字符串中的特殊字符和空格
    2024-11-11
  • SWT(JFace) Menu、Bar...體驗(yàn)代碼

    SWT(JFace) Menu、Bar...體驗(yàn)代碼

    SWT(JFace)體驗(yàn)之Menu、Bar實(shí)現(xiàn)代碼。
    2009-06-06
  • 詳解Java String中intern方法的原理與使用

    詳解Java String中intern方法的原理與使用

    這篇文章主要為大家介紹了Java String中intern方法的原理以及使用。文中通過圖片和示例代碼進(jìn)行了詳細(xì)展示,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-05-05
  • SpringBoot不讀取bootstrap.yml/properties文件問題

    SpringBoot不讀取bootstrap.yml/properties文件問題

    這篇文章主要介紹了SpringBoot不讀取bootstrap.yml/properties文件問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 基于request.getAttribute與request.getParameter的區(qū)別詳解

    基于request.getAttribute與request.getParameter的區(qū)別詳解

    本篇文章小編為大家介紹,基于request.getAttribute與request.getParameter的區(qū)別詳解。需要的朋友參考下
    2013-04-04
  • 詳解Java中Array和ArrayList的比較和轉(zhuǎn)換

    詳解Java中Array和ArrayList的比較和轉(zhuǎn)換

    在 Java 編程中,arrays 和 arraylists 都是基本的數(shù)據(jù)結(jié)構(gòu),用來存放數(shù)據(jù)集合,雖然兩者的用途一樣,但是它們的特點(diǎn)極大地影響應(yīng)用的性能和靈活性,本文探討 arrays 和 arraylists 的重要特性,它們各自的強(qiáng)項(xiàng)和弱點(diǎn),,需要的朋友可以參考下
    2023-08-08
  • 一文吃透消息隊(duì)列RocketMQ實(shí)現(xiàn)消費(fèi)冪等原理

    一文吃透消息隊(duì)列RocketMQ實(shí)現(xiàn)消費(fèi)冪等原理

    這篇文章主要介紹了消息隊(duì)列RocketMQ實(shí)現(xiàn)消費(fèi)冪等的全面講解,幫助大家吃透RocketMQ消息隊(duì)列消費(fèi)冪等,更好的的應(yīng)用與工作實(shí)踐,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01

最新評論