AOP的几种增强方式

五种增强/通知

上面的@Before和@After只是aop五种增强也叫通知的其中两种。执行顺序各有不同。

前置通知(@Before)
后置通知(@Ater)
返回通知(@AfterReturning)
异常通知(@AfterThrowing)
环绕通知(@Around)

异常通知和返回通知只会有一个出现,目标方法异常后会进入异常通知方法,不会进入返回通知方法。
正常执行会进入返回通知方法,不会进入异常通知方法。

    @Before("log()")
    public void doBefore() {
        System.out.println("前置通知-Before");
    }

    @After("log()")
    public void doAfter() {
        System.out.println("后置通知-After");
    }

    @AfterReturning("log()")
    public void doAfterReturning() {
        System.out.println("返回通知-AfterReturning");
    }

    @AfterThrowing("log()")
    public void doAfterThrowing() {
        System.out.println("异常通知-AfterThrowing");
    }

目标方法正常执行的情况下打印:

前置通知-Before
后置通知-After
返回通知-AfterReturning

目标方法异常执行的情况下打印:

前置通知-Before
后置通知-After
异常通知-AfterThrowing

环绕通知比较特殊,ProceedingJoinPoint.proceed()方法表示继续执行目标方法。
环绕通知的返回值就是目标方法的返回值。如果没有返回值,目标方法也没有了。

    @Around("log()")
    public Object doAround(ProceedingJoinPoint proceedingJoinPoint) {

        System.out.println("环绕通知开始-Around");
        Object o = null;
        try {
            o = proceedingJoinPoint.proceed();
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
        System.out.println("环绕通知结束-Around");
        return o;
    }

加入环绕通知后的执行顺序

环绕通知开始-Around
前置通知-Before
环绕通知结束-Around
后置通知-After
返回通知-AfterReturning

proceed()方法的有参方法甚至可以修改目标方法的参数,传入一个Object数组

    Object[] var1 = new Object[]{"参数a"};
    o = proceedingJoinPoint.proceed(var1);

由此可见,环绕通知可以用于对业务逻辑判断后可以修改目标方法入参的场景。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值