解決Aop @AfterReturning因返回類型不一致導(dǎo)致無法執(zhí)行切面代碼
Aop @AfterReturning因返回類型不一致導(dǎo)致無法執(zhí)行切面代碼
要做返回異常之后,所有操作回滾的操作,本來想著泛型用 Object 就表示所有返回類型是 CommonResult 并且加指定注解的都走這個通知的代碼,但是如下配置,無論如何也不生效


進入源碼里發(fā)現(xiàn),判斷是否執(zhí)行這個 advice 會判斷被注解的方法的返回類型和通知方法的參數(shù)泛型是否一致

解決方法
就是把 afterReturning 通知的參數(shù)的泛型去掉。

AOP @AfterReturning的使用
首先引入依賴
<!--spring AOP的支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>定義一個注解作為切點
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface LogInfo {
String value() default "";
}寫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());
}
}寫測試接口
/**
* 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?random隨機數(shù)的用法及常見應(yīng)用場景
這篇文章主要給大家介紹了關(guān)于java?random隨機數(shù)的用法及常見應(yīng)用場景的相關(guān)資料,Java中的Random類是用來生成偽隨機數(shù)的工具類,它可以用來生成隨機的整數(shù)、浮點數(shù)和布爾值,需要的朋友可以參考下2023-11-11
Spring?Boot?中正確地在異步線程中使用?HttpServletRequest的方法
文章討論了在Spring?Boot中如何在異步線程中正確使用HttpServletRequest的問題,介紹了Tomcat的請求對象復(fù)用機制及其對異步線程的影響,并解釋了AsyncContext的作用與局限性,感興趣的朋友一起看看吧2025-03-03
SpringBoot多環(huán)境開發(fā)與日志小結(jié)
這篇文章主要介紹了SpringBoot多環(huán)境開發(fā)與日志,下面給大家說一下如何基于多環(huán)境開發(fā)做配置獨立管理,務(wù)必掌握,需要的朋友可以參考下2022-08-08
java跳出循環(huán)的三種方式總結(jié)(break語句、continue語句和return語句)
在實際編程中,有時需要在條件語句匹配的時候跳出循環(huán),下面這篇文章主要給大家介紹了關(guān)于java跳出循環(huán)的三種方式,其中包括break語句、continue語句和return語句的相關(guān)資料,需要的朋友可以參考下2023-03-03

