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

时间:2016-12-07 18:52:24

标签: 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);
  }
}

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

  public ExecutionPipelineConfig() {
  }

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

1 个答案:

答案 0 :(得分:4)

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

  • 在集合中排序实例
  • 订购executionListeners
  • @Configuration elements(spring framework 4.2 +)

@Order注释可以在您的案例级别适用于您的配置,如果您的春季版本> 4.2。

例如:

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

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

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