Spring 存在多个AOP切面时,执行顺序问题
warning:
这篇文章距离上次修改已过229天,其中的内容可能已经有所变动。
在Spring中,AOP切面的执行顺序可以通过使用@Order
注解或者实现Ordered
接口来指定。数值越小,优先级越高,执行顺序越靠前。
以下是一个简单的例子:
import org.springframework.core.annotation.Order;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
@Aspect
@Component
@Order(1)
public class FirstAspect {
@Before("execution(* com.example.service.*.*(..))")
public void beforeAdvice() {
System.out.println("First Aspect before advice");
}
}
@Aspect
@Component
@Order(2)
public class SecondAspect {
@Before("execution(* com.example.service.*.*(..))")
public void beforeAdvice() {
System.out.println("Second Aspect before advice");
}
}
在这个例子中,FirstAspect
将在SecondAspect
之前执行,因为它具有更低的顺序值。如果两个切面在相同的顺序值上,则它们的执行顺序是定义在Spring容器中的先后顺序,这通常是通过在Java配置中或在组件扫描中的注册顺序来确定的。
评论已关闭