Spring关于AOP的学习3(AOP注解2:@Pointcut、@Around、关于两个切面类的执行顺序)

AOP注解:
(1)@Pointcut:在使用其他注解时,需要写包的表达式,而@Pointcut就是用来声明一样的包路径,已达到代码简便

/**
     * 多个方法的表达式一样,可以自定义一个无参构造方法,
     * 定义后添加@PointCut,后续使用可以直接调用
     * 此处的方法只是起到一个声明作用,能够提供内部其他通知方法的调用
     */
    @Pointcut("execution(public Integer com.msb.service.MyCalculcator.*(Integer,Integer))")
    public void myPointCut(){ }

(2)@Acound:环绕通知

/**
     * 环绕通知执行的时候是优先于普通通知的
     * 如果是正常结束,执行结束是:
     *      环绕前置通知 -> @Before -> 环绕后置通知 -> 环绕通知返回 -> @After -> @AfterReturning
     * 如果是异常结束:
     *      环绕前置通知 -> @Before -> 环绕异常通知 -> 环绕通知返回 -> @AfterThrowing -> @AfterReturning
     * 如果出现异常的时候,在环绕通知中解决了,普通通知是接收不到的,如果想要让普通通知接收到需要进行抛出throw throwable
     *      执行顺序:
     *      环绕前置通知 -> @Before -> 环绕异常通知 -> 环绕通知返回 -> @AfterThrowing -> @AfterThrowing
     */
    //环绕通知
    @Around(value = "myPointCut()")
    public Object around(ProceedingJoinPoint proceedingJoinPoint){
        //获取方法名
        Signature signature = proceedingJoinPoint.getSignature();
        //获取方法信息
        Object[] args = proceedingJoinPoint.getArgs();
        Object result = null;
        try {
            //前置通知
            System.out.println("环绕通知strat:"+signature.getName()+"方法开始执行,参数为:"+ Arrays.asList(args));
            //通过反射的方式调用目标的方法,相当于执行method.invoke(),可以自己修改结果值
            result = proceedingJoinPoint.proceed(args);
            //返回通知:返回执行结果之后执行
            System.out.println("环绕通知stop:"+signature.getName()+"方法执行结束");
        }catch (Throwable throwable) {
            //异常通知
            System.out.println("环绕异常通知:"+signature.getName()+"出现异常");
        }finally {
            //后置通知:在方法执行结束之后执行
            System.out.println("环绕返回通知:"+signature.getName()+"方法返回结果:"+result);
        }
        return result;
    }

(3)关于两个切面类的执行顺序:若有多个切面类,执行的时候按照的顺序:执行顺序是按照类名的首字符,越小越优先,可以用@Order(数字)注解,数字越小越优先

关于AOP学习源码链接:源码下载

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值