天天看点

Spring-AOP通知获取数据

目录

​​一、AOP通知获取参数数据​​

​​二、AOP通知获取返回值数据​​

​​三、AOP通知获取异常数据(了解)​​

获取切入点方法的参数

JoinPoint:适用于前置、后置、返回后、抛出异常后通知

ProceedJointPoint:适用于环绕通知

获取切入点方法返回值

返回后通知

环绕通知

获取切入点方法运行异常信息

抛出异常后通知

环绕通知

一、AOP通知获取参数数据

JoinPoint对象描述连接点方法的运行状态,可以获取到原始方法的调用参数

//JoinPoint:用于描述切入点的对象,必须配置成通知方法中的第一个参数,可用于获取原始方法调用的参数
    @Before("pt()")
    public void before(JoinPoint jp) {
        Object[] args = jp.getArgs();
        System.out.println(Arrays.toString(args));
    }

    @After("pt2()")
    public void after(JoinPoint jp) {
        Object[] args = jp.getArgs();
        System.out.println(Arrays.toString(args));
        System.out.println("after advice ...");
    }      

ProceedJoinPoint是JoinPoint的子类

//ProceedingJoinPoint:专用于环绕通知,是JoinPoint子类,可以实现对原始方法的调用
    @Around("pt()")
    public Object around(ProceedingJoinPoint pjp) throws Throwable{
        Object[] args = pjp.getArgs();
        System.out.println(Arrays.toString(args));
        Object ret = pjp.proceed(args);
        return ret;
    }      

二、AOP通知获取返回值数据

抛出异常后通知可以获取切入点方法中出现的异常信息,使用形参可以接收对应的异常对象

//设置返回后通知获取原始方法的返回值,要求returning属性值必须与方法形参名相同
    @AfterReturning(value = "pt()",returning = "ret")
    public void afterReturning(JoinPoint jp,String ret) {
        System.out.println("afterReturning advice ..."+ret);
    }      
@Around("pt()")
    public Object around(ProceedingJoinPoint pjp) {
        Object ret = pjp.proceed();
        return ret;
    }      

三、AOP通知获取异常数据(了解)

//设置抛出异常后通知获取原始方法运行时抛出的异常对象,要求throwing属性值必须与方法形参名相同
    @AfterThrowing(value = "pt()",throwing = "t")
    public void afterThrowing(Throwable t) {
        System.out.println("afterThrowing advice ..."+t);
    }      
@Around("pt()")
    public Object around(ProceedingJoinPoint pjp) {
        Object ret = null;
        try {
            ret = pjp.proceed();
        } catch (Throwable t) {
            t.printStackTrace();
        }
        return ret;
    }