后置通知(@AfterReturning)

Exisi 2022-11-28 08:45:31
Categories: Tags:

 

参数

描述

argNames

在没有调试信息的编译时,或者在运行时解释切入点时,通知声明中使用的任何参数的名称都不可用

pointcut

要绑定通知的切入点表达式在指定时覆盖“value”

returning

通知签名中将返回值绑定到的参数名称

value

要绑定通知的切入点表达式

 

​​​​​​​

示例

@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 方法中可以对返回值进行增强,可以根据业务需要做相应的封装