- 觉得这个两个分开的话都好短,那就放在一起讲吧
- 增强方法的执行顺序,就是说如果程序中定义了不止一个增强处理的类,并且是对同一个方法进行增强,那么在默认情况下这些增强方法的执行顺序是随机的,spring无法决定那个先那个后,如果需要指定那个增强方法需要先执行的话(只能是说让那个类里的同类增强方法先执行),可以在增强类里使用order注解实现,orfer注解可以传入一个int类型的参数,这个参数越小,说明执行的优先级越高。
- 对前面的代码进行修改
@Aspect @Order(2) public class AuthAspect { ... }
@Aspect @Order(1) public class FourAdvice { ... }
AuthAspect的优先级设置为2,FourAdvice的优先级为1,所以FourAdvise的和AuthAspect里同类型的增强方法中FourAspect里的会先执行
FourAdvice around增强, 方法执行之前 before增强,方法执行之前 ...
-
好,接下来是定义切入点,这一个是为了结局不用一个增强方法就使用一句execution...的问题,讲切入点定义成像是变量的东西,然后在其他的增强方法中就可以直接使用这个变量,不用自己再写一个。效果是不用说的,软件维护什么的没有这个的话真是想都不该想。
-
定义切入点的语法是这样的
@Aspect public class SystemArchitecture { @Pointcut("execution(* pointcut_package.*.* (..))") // 使用@Pointcut注释加上切入点,还要跟着一个任意参数方法体的方法 public void pointcutTest(){} }
-
然后就可以在其他增强方法里使用这个切入点啦
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》后总结出来的。
-
- 对前面的代码进行修改
Spring 进阶(18)Spring的AOP (6) 使用注解配置切面(3)增强方法的执行顺序和定义切入点
最新推荐文章于 2023-09-08 13:50:14 发布