Spring Interceptor的执行顺序是按照它们在Spring配置文件中注册的顺序来的。具体来说:
1.当一个请求到来时,Interceptor的preHandle方法会按照注册的顺序依次被执行。如果所有Interceptor的preHandle方法都返回了true,则请求会继续被处理;如果其中有任何一个Interceptor的preHandle方法返回了false,则请求处理立即终止,后续的Interceptor以及实际的请求处理方法都不会被执行。
2.请求处理完毕后,Interceptor的postHandle和afterCompletion方法将会被执行,但这两个方法的执行顺序是与注册顺序恰恰相反的。也就是说,先注册的Interceptor的这两个方法会后执行,后注册的Interceptor的这两个方法会先执行。
这种设计允许我们在Interceptor中实现一些类似于前置检查和后置处理的功能,同时也需要我们注意控制Interceptor的注册顺序以保证其正确执行。
以下是注册多个Interceptor的一个例子:
@Configuration @EnableWebMvc public class AppConfig implements WebMvcConfigurer { @Autowired FirstInterceptor firstInterceptor; @Autowired SecondInterceptor secondInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(firstInterceptor).addPathPatterns("/api/*"); registry.addInterceptor(secondInterceptor).addPathPatterns("/api/*"); } }