当对于同一个方法加上多个相同类型的通知,如何确定这些不同通知的优先级
使用@Order注解指定优先级,值越小优先级越高
配置xml文件
<context:component-scan base-package="spring.aop.aop"></context:component-scan>
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
建立两个不同类中对同一方法建立前置通知
LoggingAspect.java
@Order(2)
@Aspect
@Component
public class LoggingAspect {
@Before("execution (* spring.aop.aop.ArithmeticCalculatorImpl.*(..)) ")
public void beforeMethod(JoinPoint joinPoint){
String methodName = joinPoint.getSignature().getName();
List<Object> args = Arrays.asList(joinPoint.getArgs());
System.out.println("The LoggingAspect "+methodName+" begins with "+args);
}
}
ViberAspect.java
@Order(1)
@Aspect
@Component
public class ViberAspect {
@Before("execution (* spring.aop.aop.ArithmeticCalculatorImpl.*(..)) ")
public void beforeMethod(JoinPoint joinPoint){
String methodName = joinPoint.getSignature().getName();
List<Object> args = Arrays.asList(joinPoint.getArgs());
System.out.println("--> The ViberAspect "+methodName+" begins with "+args);
}
}
主函数
public static void main(String[] args) {
ApplicationContext applicationContext =
new ClassPathXmlApplicationContext("spring-aop.xml");
ArithmeticCalculator arithmeticCalculator = (ArithmeticCalculator) applicationContext.getBean("ArithmeticCalculatorImpl");
System.out.println("result: "+arithmeticCalculator.add(1,7));
}
运行结果

本文探讨了在Spring AOP中,如何通过@Order注解为相同类型的通知设定优先级,确保通知按预期顺序执行。通过示例展示了如何在两个不同类中对同一方法设置前置通知,并通过@Order注解值的大小决定执行顺序。
158

被折叠的 条评论
为什么被折叠?



