Spring boot aop 调用两次或多次的问题分析

原因分析

  1. Aop 配置类加载了两次
  2. @Around 获取返回值操作不当

解决方法

  1. 配置类只需要加两个注解,其他地方无需修改
@Aspect
@Component
public class AopConfig {}
  1. 获取返回值的错误操作
// 错误版本
@Around("log()")
    public Object around(ProceedingJoinPoint point) throws Throwable {
        System.out.println("arround");
        logger.info("【返回值(return)】:"+JSONUtil.toJsonStr(point.proceed()));
        return point.proceed();
    }
  // 正确示范
@Around("log()")
    public Object around(ProceedingJoinPoint point) throws Throwable {
        System.out.println("arround");
        Object proceed = point.proceed();
        logger.info("【返回值(return)】:"+JSONUtil.toJsonStr(proceed));
        return proceed;
    }

错误原因:调用了两次 point.proceed() 方法,导致 @Before 的方法执行了两次

posted @ 2020-10-15 13:38  正在路上的兔子  阅读(2975)  评论(1编辑  收藏  举报