spring AOP 切面优先级 @order和重用切点表达式

骑猪看日落 2022-04-22 23:10 783阅读 0赞

如果有多个切面,有默认的先后执行顺序。但是可以用@Order(num)定义优先级,num越小,优先级越高。
新建一个ValidationAspect 切面,与原来的那个切面用@order方式确立先后运行顺序

  1. package com.spring.aop.impl;
  2. import java.util.Arrays;
  3. import org.aspectj.lang.JoinPoint;
  4. import org.aspectj.lang.annotation.Aspect;
  5. import org.aspectj.lang.annotation.Before;
  6. import org.springframework.core.annotation.Order;
  7. import org.springframework.stereotype.Component;
  8. /*
  9. 可以使用@order注解指定切面的优先级,值越小优先级越高
  10. */
  11. @Order(2)
  12. @Aspect
  13. @Component
  14. public class ValidationAspect {
  15. @Before("LoggingAspect.declareJointPointExpression()")
  16. public void validateArgs(JoinPoint joinPoint) {
  17. System.out.println("validate:"+Arrays.asList(joinPoint.getArgs()));
  18. }
  19. }

在先前的LoggingAspect(上一篇博客即可找到)里加上
切点表达式

  1. /*定义一个方法,用于声明切入点表达式,一般,该方法中再不需要添入其他的代码
  2. * 使用@Pointcut 来声明切入点表达式
  3. * 后面的其他通知直接使用方法来引用当前的切入点表达式
  4. */
  5. @Pointcut("execution(* com.spring.aop.impl.*.*(..))")
  6. public void declareJointPointExpression() {}

@Before(“declareJointPointExpression()”)其他的类似,如果在不同的切面中,前面加上那个类就行,或者不在同一包中注意引用好包名
使用切入点,后面的切面就可以使用这个切点,写法更整洁。

发表评论

表情:
评论列表 (有 0 条评论,783人围观)

还没有评论,来说两句吧...

相关阅读

    相关 aop 切点表达式

    1. 简介        面向对象编程,也称为OOP(即Object Oriented Programming)最大的优点在于能够将业务模块进行封装,从而达到功能复用的目