Spring 进阶(18)Spring的AOP (6) 使用注解配置切面(3)增强方法的执行顺序和定义切入点

52 篇文章 0 订阅
  1. 觉得这个两个分开的话都好短,那就放在一起讲吧
  2. 增强方法的执行顺序,就是说如果程序中定义了不止一个增强处理的类,并且是对同一个方法进行增强,那么在默认情况下这些增强方法的执行顺序是随机的,spring无法决定那个先那个后,如果需要指定那个增强方法需要先执行的话(只能是说让那个类里的同类增强方法先执行),可以在增强类里使用order注解实现,orfer注解可以传入一个int类型的参数,这个参数越小,说明执行的优先级越高。
    1. 对前面的代码进行修改
      @Aspect
      @Order(2)
      public class AuthAspect {
      ...
      }
      @Aspect
      @Order(1)
      public class FourAdvice {
          ...
      }

      AuthAspect的优先级设置为2,FourAdvice的优先级为1,所以FourAdvise的和AuthAspect里同类型的增强方法中FourAspect里的会先执行

      FourAdvice around增强, 方法执行之前
      before增强,方法执行之前
      
          ...

        

    2. 好,接下来是定义切入点,这一个是为了结局不用一个增强方法就使用一句execution...的问题,讲切入点定义成像是变量的东西,然后在其他的增强方法中就可以直接使用这个变量,不用自己再写一个。效果是不用说的,软件维护什么的没有这个的话真是想都不该想。

      1. 定义切入点的语法是这样的

        @Aspect
        public class SystemArchitecture {
            @Pointcut("execution(* pointcut_package.*.* (..))")
        //    使用@Pointcut注释加上切入点,还要跟着一个任意参数方法体的方法
            public void pointcutTest(){}
        }

         

      2. 然后就可以在其他增强方法里使用这个切入点啦

        package pointcut_package;
        
        import org.aspectj.lang.annotation.AfterReturning;
        import org.aspectj.lang.annotation.Aspect;
        
        @Aspect
        public class LogAspect {
            @AfterReturning(returning = "rvt" , pointcut = "SystemArchitecture.pointcutTest()")
        //    指定使用那个切入点
            public void log(Object rvt){
                System.out.println("目标方法返回值为" + rvt);
                System.out.println("啦啦啦~~~");
            }
        }
        

        这是我看李刚编著的《轻量级javaEE企业应用实战(第五版)-Struts2+Spring5+Hibernate5/JAP2》后总结出来的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值