使用多个 Spring WebMvcConfigurerAdapter 如何控制配置 类 的顺序?

With multiple Spring WebMvcConfigurerAdapter how can I control the order of the Configuration classes?

有2种配置,在不同的jar文件中我想控制拦截器注册的顺序。一个拦截器可能依赖于另一个拦截器设置的数据。

我已经在 addInterceptors 方法上尝试了 @Order。

@Configuration
public class PipelineConfig extends WebMvcConfigurerAdapter {
  @Autowired
  @Qualifier("Audit")
  HandlerInterceptor auditInterceptor;

  public PipelineConfig() {
  }

  @Order(2)
  public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(this.auditInterceptor);
  }
}

@Configuration
public class ExecutionPipelineConfig extends WebMvcConfigurerAdapter {
  @Autowired
  @Qualifier("ExecutionContext")
  HandlerInterceptor executionContextInterceptor;

  public ExecutionPipelineConfig() {
  }

  @Order(1)
  public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(this.executionContextInterceptor);
  }
}

spring 框架文档 [http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/ ] 指定 @Order 用于:

  • 对集合中的实例进行排序
  • 排序执行监听器
  • @配置元素(spring 框架 4.2+)

如果您的 spring 版本 >4.2.

,则可以在 class 级别为您的配置应用 @Order 注释

例如:

@Configuration
@Order(2)
public class PipelineConfig extends WebMvcConfigurerAdapter {

这也可能是用于聚合@Configuration 文件的@Import 注释的用例(http://docs.spring.io/spring-javaconfig/docs/1.0.0.M4/reference/html/ch04s03.html)

另一方面,如果您的拦截器可能依赖于 data/beans,您可以使用 @DependsOn("beanName") 注释。