Spring中的order

让我来解释一下Spring中的order排序规则:
  1. 基本原则:
  • order值越小,优先级越高
  • 默认情况下order值为0
  • order可以是负数,正数或0
  1. 常见使用场景:

// AOP切面排序 @Order(1) @Aspect public class LogAspect { //... } @Order(2) @Aspect public class SecurityAspect { //... } // Filter过滤器排序 @Order(1) public class AuthenticationFilter implements Filter { //... } // 事件监听器排序 @Order(1) public class EmailListener implements ApplicationListener<OrderEvent> { //... }

  1. 排序规则:
  • 相同类型的组件按order值从小到大排序
  • order值相同时,按照类名的字母顺序排序
  • 没有指定order的默认值为最低优先级(Ordered.LOWEST_PRECEDENCE)
  1. 实现方式:
  • 使用@Order注解
  • 实现Ordered接口
  • 实现PriorityOrdered接口(优先级高于普通Ordered)
  1. 注意事项:
  • @Order对@Autowired注入的依赖顺序无效
  • 要对@Autowired注入排序,需要使用@OrderBy注解
  • PriorityOrdered接口的优先级高于@Order注解

所以简单总结:order值越小 = 优先级越高 = 越先执行。通过合理设置order值,我们可以控制Spring组件的执行顺序。