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

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

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

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 是項目中公共的返回對象,里面包含 code、body等等,大同小異。

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

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

確實,我們接口返回的都是響應(yīng)體都是Result的json格式, 但是呢,并不一定Controller的返回值就是Result,而是項目中通過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)方法返回值 與 真實的目標(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.定義一個注解作為切點

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

3.寫aop實現(xiàn)

@Aspect
@Component
@Slf4j
public class LogInfoAspect {
 
    /**
    * 配置切點 切點為注解 意為有該注解的地方日志生效
    */
    @Pointcut("@annotation(com.example.myproject.annoation.LogInfo)")
    public void pointcut() { }
 
    /**
    * 定義切點,返回值為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.寫測試接口 

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

總結(jié)

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

相關(guān)文章

  • 為什么Java開發(fā)需要配置環(huán)境變量

    為什么Java開發(fā)需要配置環(huán)境變量

    這篇文章主要介紹了為什么Java開發(fā)需要配置環(huán)境變量,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-08-08
  • Spring Bean Scope 有狀態(tài)的Bean與無狀態(tài)的Bean

    Spring Bean Scope 有狀態(tài)的Bean與無狀態(tài)的Bean

    這篇文章主要介紹了Spring Bean Scope 有狀態(tài)的Bean與無狀態(tài)的Bean,每個用戶有自己特有的一個實例,在用戶的生存期內(nèi),bean保持了用戶的信息,下面來了解有狀態(tài)和無狀態(tài)的區(qū)別吧
    2022-01-01
  • java并發(fā)中DelayQueue延遲隊列原理剖析

    java并發(fā)中DelayQueue延遲隊列原理剖析

    DelayQueue隊列是一個延遲隊列,本文將結(jié)合實例代碼,詳細(xì)的介紹DelayQueue延遲隊列的源碼分析,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Linux下java環(huán)境配置圖文方法

    Linux下java環(huán)境配置圖文方法

    這篇文章主要介紹了Linux下java環(huán)境配置圖文方法,需要的朋友可以參考下
    2023-06-06
  • Java與Python兩種編程語言的比較與應(yīng)用舉例詳解

    Java與Python兩種編程語言的比較與應(yīng)用舉例詳解

    這篇文章主要介紹了Java與Python兩種編程語言比較與應(yīng)用的相關(guān)資料,Java和Python各有特點,Java適用于企業(yè)級應(yīng)用開發(fā),Python則在數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)領(lǐng)域占優(yōu)勢,兩者在語法、應(yīng)用領(lǐng)域、性能、開發(fā)效率等方面存在差異,需要的朋友可以參考下
    2025-02-02
  • Java 添加文本框到PPT幻燈片過程解析

    Java 添加文本框到PPT幻燈片過程解析

    這篇文章主要介紹了Java 添加文本框到PPT幻燈片過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • 最常用的1000個Java類(附代碼示例)

    最常用的1000個Java類(附代碼示例)

    這篇文章主要介紹了最常用的1000個Java類(附代碼示例),需要的朋友可以參考下
    2015-04-04
  • SpringBoot集成SpringSecurity安全框架方式

    SpringBoot集成SpringSecurity安全框架方式

    這篇文章主要介紹了SpringBoot集成SpringSecurity安全框架方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • java 串口通信實現(xiàn)流程示例

    java 串口通信實現(xiàn)流程示例

    這篇文章主要介紹了java 串口通信實現(xiàn)流程示例,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • java、php、C#、asp實現(xiàn)短信群發(fā)功能的方法

    java、php、C#、asp實現(xiàn)短信群發(fā)功能的方法

    這篇文章主要介紹了java、php、C#、asp實現(xiàn)短信群發(fā)功能的方法,以實例形式較為詳細(xì)的分析了java及php、C#、asp、VB.NET等調(diào)用短信發(fā)送接口進(jìn)行短信發(fā)送的功能,需要的朋友可以參考下
    2015-02-02

最新評論