Spring AOP之多切面运行顺序

本文探讨了Spring AOP中多切面运行的顺序,解释了默认按照首字母顺序执行切面通知,并举例说明了环绕通知如何影响执行顺序。此外,还介绍了如何通过@Order注解调整切面执行优先级,以及AOP在日志记录、权限验证等场景的应用。
摘要由CSDN通过智能技术生成

多切面运行顺序

当一个方法的执行被多个切面共同切的时候,环绕通知只影响当前切面的通知顺序,例如创建两个切面logUtil,validateUtil两个切面共同监视计算器类的加法运算,add(int a,int b);测试中,看切面工具类的名称首字母,默认情况下a-z执行顺序,所以这个时候logUtil切面通知比validateUtil先执行通知;
所以顺序是:L的前置通知 -->v的前置通知–>执行add方法,然后v的后置通知–>V的后置返回–>L的后置通知–>L的后置返回。
但是当logUtil中加入了环绕通知,所以环绕通知要比logUtil的普通通知先执行,环绕通知功能很强大,在通过反射执行方法的前面我们可以更改这个方法的参数,但是普通通知不能这么做。虽然在logUtil加了环绕通知,但是这个环绕通知只是比logUtil的普通通知先执行无论是进入切面前还是出切面时,他并不影响validateUtil这个切面的普通通知的执行顺序,所以加了环绕通知执行顺序是
环绕前置–> log前置–>va前置–>目标方法–>va后置–>va返回–>环绕返回通知–>环绕后置–>log后置–>log返回。

图:
这里的这里的validate切面就是图中的VaAspect;

对啦,可以更改默认的切面顺序,要在将要更改的切面类上加入@order(int value)注解,value默认值很大,超级大,越大执行的优先级越低,所以如果把它调成1就是先执行这个切面的通知。

AOP的应用场景:

  1. aop可以进行日志记录;

  2. aop可以做权限验证

  3. AOP可以做安全检查

  4. AOP可以做事务控制

回忆基于注解的AOC配置
  • 将目标类和切面类都加入到IOC容器中。@Component

  • 告诉Spring哪个是切面类@Aspect

  • 在切面类中使用五个通知注解来配置切面中的这些方法都什么时候在那运行

  • 开启注解的aop功能。

不使用注解实现AOP配置。
1.切面类
public class LogUtil {
   
    public void performance(){
   }

    public void logStart(JoinPoint joinPoint)
    {
   
        //获取方法上的参数列表
        Object[] args = joinPoint.getArgs();
        //获取方法签名
        Signature signature = joinPoint.getSignature();

        String name = signature.getName();//获取方法名
        System.out.println("前置通知:"+name+" 方法开始执行了....参数是:"+ Arrays.asList(args) +"");
    }

    public void logReturn(JoinPoint point,Object result)
    {
   
        String name = point.getSignature().getName();
        Object[] args = point.getArgs();
        System.out.println
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值