3.4 SpringAOP之通知获取数据

1.JoinPoint和ProceedingJoinPoint接口

接口定义功能适用通知类型
JoinPoint代表了在程序执行过程中的连接点获取到连接点(被拦截方法)的名称、参数、目标对象以及代理对象等信息前置、后置、返回后、抛出异常后通知
ProceedingJoinPoint是 JoinPoint 接口的子接口,除了继承了 JoinPoint 的所有功能外,还增加了一个非常关键的方法 proceed()通过 proceed() 方法,可以决定是否继续执行被拦截的方法以及如何执行环绕通知

2.通知获取数据分类

分类适用通知类型
获取参数前置、后置、环绕、返回后、抛出异常后通知
获取切入点方法返回值环绕、返回后通知
获取切入点方法运行异常信息环绕、抛出异常后通知

3.获取参数

(1)前置、后置、返回后、抛出异常后通知

    @Before("切入点方法名()")
    public void advice(JoinPoint jp) {
    	// 获取切入点方法参数
        Object[] args = jp.getArgs();
    }

(2)适用于环绕通知

  	@Around("切入点方法名()")
    public Object advice(ProceedingJoinPoint pjp) throws Throwable {
    	// 获取切入点方法参数
        Object[] args = pjp.getArgs();
    }

4.获取返回值

(1)环绕通知

	@Around("切入点方法名()")
    public Object aroundAdvice(ProceedingJoinPoint pjp) throws Throwable {
        // 对原始操作的调用,并接收其返回值
        Object proceed = pjp.proceed();
        return proceed;
    }

(2)返回后通知
注:如果返回后通知同时获取参数和返回值,通知的形参必须是JoinPoint形参在前,接收返回值的形参在后

	@AfterReturning(value = "切入点方法名()" ,returning = "ret(通知方法中用来接收返回值的形参名)")
    public void afterReturning(Object ret) {
        System.out.println("返回后通知获取切入点方法返回值:" + ret);
    }

5.获取异常

(1)环绕通知

    @Around("切入点方法名()")
    public Object aroundAdvice(ProceedingJoinPoint pjp) {
        Object proceed = null;
        try {
            proceed = pjp.proceed();
        } catch (Throwable e) {
            e.printStackTrace();
        }
        return proceed;
    }

(2)抛出异常后通知

 	@AfterThrowing(value = "切入点方法名()", throwing = "e(通知方法中用来接收异常的形参名)")
    public void afterThrowing(Throwable e){
        e.printStackTrace();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码届艺术家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值