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

spring aop之@AfterReturning不生效問題及解決

 更新時(shí)間:2024年05月10日 10:38:09   作者:阿亮_1024  
這篇文章主要介紹了spring aop之@AfterReturning不生效問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

spring aop之@AfterReturning不生效

長話短說,我其他的都已經(jīng)檢查過了,連@Before都能成功執(zhí)行,@AfterReturning就是不執(zhí)行。

后經(jīng)檢查,是我@AfterReturning中returning的問題,我設(shè)置的是:

@Pointcut("execution(public * com.xxx.xxx.xx.xxx.controller.*.*(..))")
public void request() {}


 @AfterReturning(returning = "result", value = "request()")
 public void after(Result result){
	// 具體邏輯
 }

Result 是項(xiàng)目中公共的返回對(duì)象,里面包含 code、body等等,大同小異。

其中SaveToInsetSql()切入點(diǎn)表達(dá)式的方法,經(jīng)檢查,是可以確定到具體的攔截方法的。

按道理,這樣是沒問題的,我反復(fù)的檢查,也百度了半天,始終沒解決問題,在這兒搗鼓了半天,最終讓我發(fā)現(xiàn)了問題,就是這個(gè)Result出了問題

確實(shí),我們接口返回的都是響應(yīng)體都是Result的json格式, 但是呢,并不一定Controller的返回值就是Result,而是項(xiàng)目中通過org.springframework.web.method.support.HandlerMethodReturnValueHandler來包裝了返回體的,當(dāng)然如果controller返回值本身就是Result,就不用再包裝。

我一直習(xí)慣了在controller返回業(yè)務(wù)的具體返回值而不是經(jīng)過包裝的Result,所以忘了這茬。

Aop的執(zhí)行,是先于org.springframework.web.method.support.HandlerMethodReturnValueHandler的,所以在正常返回通知中,根據(jù)returning指定的是Result,而controller本身返回又是List、String等業(yè)務(wù)返回值,兩者匹配不上,就一直不生效。

總之:

正常反正通知中配置的 目標(biāo)方法返回值 與 真實(shí)的目標(biāo)方法返回值 無法匹配(相同或多態(tài)),導(dǎo)致正常返回通知無法執(zhí)行。

AOP @AfterReturning的使用

1.首先引入依賴

      <!--spring AOP的支持 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

2.定義一個(gè)注解作為切點(diǎn)

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface LogInfo {
    String value() default "";
}

3.寫aop實(shí)現(xiàn)

@Aspect
@Component
@Slf4j
public class LogInfoAspect {
 
    /**
    * 配置切點(diǎn) 切點(diǎn)為注解 意為有該注解的地方日志生效
    */
    @Pointcut("@annotation(com.example.myproject.annoation.LogInfo)")
    public void pointcut() { }
 
    /**
    * 定義切點(diǎn),返回值為user,要與下面方法中的入?yún)⒚鹵ser保持一致
     * returning的是獲取到要提取日志的方法的返回值
    */
    @AfterReturning(pointcut = "pointcut()",returning = "user")
    public void afterReturning(Object user){
        User user1 = (User) user;
        log.info("用戶Id為:" + user1.getUserId());
        log.info("用戶名稱為:" + user1.getUserName());
    }
}

4.寫測(cè)試接口 

    /**
     * aop測(cè)試
     * 這里的user類和aop實(shí)現(xiàn)類中定義的returning值 User 保持一致,這樣aop中才能正確讀取到返回值
     * @param
     * @return
     */
    @LogInfo
    @PostMapping("/aopTest")
    public String aopTest(@RequestBody User user){
        return user.getUserName();
    }

總結(jié)

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

相關(guān)文章

  • Java繪制迷宮動(dòng)畫并顯示的示例代碼

    Java繪制迷宮動(dòng)畫并顯示的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用Java語言實(shí)現(xiàn)繪制迷宮動(dòng)畫并顯示,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定幫助,需要的可以參考一下
    2022-08-08
  • SpringBoot+Redis+Lua防止IP重復(fù)防刷攻擊的方法

    SpringBoot+Redis+Lua防止IP重復(fù)防刷攻擊的方法

    本文主要介紹了SpringBoot+Redis+Lua防止IP重復(fù)防刷攻擊的方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 解決@FeignClient注入service失敗問題

    解決@FeignClient注入service失敗問題

    這篇文章主要介紹了解決@FeignClient注入service失敗問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • SpringBoot遇到的坑@Qualifier報(bào)紅的解決

    SpringBoot遇到的坑@Qualifier報(bào)紅的解決

    這篇文章主要介紹了SpringBoot遇到的坑@Qualifier報(bào)紅的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Spring Boot Actuator自定義健康檢查教程

    Spring Boot Actuator自定義健康檢查教程

    這篇文章主要介紹了Spring Boot Actuator自定義健康檢查教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 在SpringBoot項(xiàng)目中實(shí)現(xiàn)給所有請(qǐng)求加固定前綴

    在SpringBoot項(xiàng)目中實(shí)現(xiàn)給所有請(qǐng)求加固定前綴

    這篇文章主要介紹了在SpringBoot項(xiàng)目中實(shí)現(xiàn)給所有請(qǐng)求加固定前綴,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java中@Async異步失效的9種場(chǎng)景

    Java中@Async異步失效的9種場(chǎng)景

    最近在項(xiàng)目某個(gè)方法使用@Async注解,但是該方法還是同步執(zhí)行了,異步不起作用,到底是什么原因呢?接下來本文給大家介紹了Java?@Async異步失效的9種場(chǎng)景,需要的朋友可以參考下
    2024-05-05
  • JAVA如何獲取客戶端IP地址和MAC地址

    JAVA如何獲取客戶端IP地址和MAC地址

    本篇文章主要介紹了JAVA如何獲取客戶端IP地址和MAC地址非常具有實(shí)用價(jià)值,這里整理了詳細(xì)的代碼,需要的朋友可以參考下
    2017-08-08
  • 淺談java+內(nèi)存分配及變量存儲(chǔ)位置的區(qū)別

    淺談java+內(nèi)存分配及變量存儲(chǔ)位置的區(qū)別

    下面小編就為大家?guī)硪黄獪\談java+內(nèi)存分配及變量存儲(chǔ)位置的區(qū)別。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-08-08
  • SpringBoot2入門自動(dòng)配置原理及源碼分析

    SpringBoot2入門自動(dòng)配置原理及源碼分析

    這篇文章主要為大家介紹了SpringBoot2入門自動(dòng)配置原理及源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05

最新評(píng)論

庆城县| 淅川县| 锡林郭勒盟| 绩溪县| 衡水市| 塔城市| 仁化县| 崇州市| 句容市| 保亭| 蚌埠市| 惠东县| 城口县| 新昌县| 韶关市| 陕西省| 桐乡市| 文登市| 山阳县| 宝清县| 怀宁县| 临沧市| 贵阳市| 乃东县| 宜宾县| 井冈山市| 昌图县| 阜新市| 巴青县| 桂林市| 来宾市| 屯门区| 富顺县| 河北区| 西林县| 太和县| 福贡县| 凉山| 白山市| 揭阳市| 义乌市|