使用多个Spring WebMvcConfigurerAdapter,如何控制Configuration类的顺序?

Int*_*ted 5 spring-mvc interceptor

有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);
  }
}
Run Code Online (Sandbox Code Playgroud)

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

  public ExecutionPipelineConfig() {
  }

  @Order(1)
  public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(this.executionContextInterceptor);
  }
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*can 6

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

  • 在集合中排序实例
  • 排序执行监听器
  • @Configuration元素(Spring Framework 4.2+)

@Order如果您的春季版本> 4.2,则可以在您的案例中为您的配置应用该注释。

例如:

@Configuration
@Order(2)
public class PipelineConfig extends WebMvcConfigurerAdapter {
Run Code Online (Sandbox Code Playgroud)

同样,此代码也可以用作@Import批注的用例,以聚合@Configuration文件(http://docs.spring.io/spring-javaconfig/docs/1.0.0.M4/reference/html/ch04s03.html

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