Spring日常笔记记录14--后置通知@AfterReturning

在目标方法执行之后执行。

由于是目标方法之后执行,所以可以获取到目标方法的返回值。

该注解的 returning 属性就是用于指定接收方法返回值的变量名的。

所以,被注解为后置通知的方法,除了可以包含 JoinPoint 参数外,还可以包含用于接收返回值的变量。

该变量最好为 Object 类型,因为目标方法的返回值可能是任何类型。

 

1.增加接口方法:

 

 

2.接口实现类:

 

 

3.定义切面:

package com.example.ba02;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

import java.util.Date;

/**
 * @Aspect:是aspectj框架中的注解。
 *      作用:表示当前类是切面类。
 *      切面类:是用来给业务方法增加功能的类,在这个类中有切面的功能代码
 *      使用位置:在类定义的上面
 */
@Aspect
public class MyAspect {
    /**
     * 后置通知定义方法,方法是实现切面功能的
     * 方法的定义要求:
     * 1.公共方法public
     * 2.方法没有返回值
     * 3.方法名称自定义
     * 4.方法有参数,推荐是Object,参数名自定义
     */

    /**
     * @AfterReturning:后置通知
     *      属性:1.value 切入点表达式
     *           2.returning 自定义的变量,表示目标方法的返回值的
     *             自定义变量名必须和通知方法的形参名一样。
     *      位置:在方法定义的上面
     * 特点:
     * 1.在目标方法之后执行的
     * 2.能够获取到目标方法的返回值,可以根据这个返回值做不同的处理功能
     *   Object res = doOther();
     * 3.可以修改这个返回值
     *
     * 后置通知的执行
     *      Object res = doOther();
     *      myAfterReturning(res);
     */

    @AfterReturning(value = "execution(* *..SomeServiceImpl.doOther(..))",
                    returning = "res")
    public void myAfterReturning(Object res){
        //Object res : 是目标方法执行后的返回值,根据返回值做切面的功能处理
        System.out.println("后置通知:在目标方法之后执行的,获取的返回值是:"+res);
    }
}

 

4.编写测试类:

 

 

5.运行结果:

 

 

posted @ 2021-07-28 00:45  Brack_Pearl  阅读(1223)  评论(0编辑  收藏  举报