Spring boot aop 调用两次或多次的问题分析
原因分析
- Aop 配置类加载了两次
- @Around 获取返回值操作不当
解决方法
- 配置类只需要加两个注解,其他地方无需修改
@Aspect
@Component
public class AopConfig {}
- 获取返回值的错误操作
// 错误版本
@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 的方法执行了两次