- @AfterReturning 在目标方法之后执行的
参数 |
描述 |
argNames |
在没有调试信息的编译时,或者在运行时解释切入点时,通知声明中使用的任何参数的名称都不可用 |
pointcut |
要绑定通知的切入点表达式在指定时覆盖“value” |
returning |
通知签名中将返回值绑定到的参数名称 |
value |
要绑定通知的切入点表达式 |
- 和 @After 有些类似,区别在于 @AfterReturning 注解可以用来捕获切入方法执行完之后的返回值,对返回值进行业务逻辑上的增强处理
- 在后置通知中修改返回值,不会影响目标参数的结
示例
@Aspect @Component @Slf4j public class LogAspectHandler { /** * 在上面定义的切面方法返回后执行该方法,可以捕获返回对象或者对返回对象进行增强 * @param joinPoint joinPoint * @param result result */ @AfterReturning(pointcut = "pointCut()", returning = "result") public void doAfterReturning(JoinPoint joinPoint, Object result) {
Signature signature = joinPoint.getSignature(); String classMethod = signature.getName(); log.info("方法{}执行完毕,返回参数为:{}", classMethod, result); // 实际项目中可以根据业务做具体的返回值增强 log.info("对返回参数进行业务上的增强:{}", result + "增强版"); } }
|
运行结果:
方法 testAop 执行完毕,返回参数为:Hello CSDN
对返回参数进行业务上的增强:Hello CSDN 增强版
注
在 @AfterReturning 注解 中,属性 returning 的值必须要和参数保持一致,否则会检测不到。
该方法中的第二个入参就是被切方法的返回值,在 doAfterReturning 方法中可以对返回值进行增强,可以根据业务需要做相应的封装