今天写接口,记录个想到的小问题:
我们在spring boot中配置拦截器,一般的套路都是:
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 某个拦截器a
registry.addInterceptor(xxxInterceptor)
.addPathPatterns("pathRegExp");
// 其他拦截器b,c,d
...
}
问题是:Handler 初始化生成 HandlerExecutionChain 时,是只会将满足自己路由正则的a拦截器绑定到一起,还是说会把a,b,c,d一起绑定进来(然后运行的时候再一个个正则判断拦截器是否符合)?
问题先记录下,有空再看源码,个人感觉趋向于前者。
问题已解决:
spring mvc的处理逻辑是这样的:
spring mvc在 HandlerMapping类getHandler的时候,
会先取HandlerMethod,在与匹配到的拦截器一起组成一个HandlerExecutionChain对象。
我们自定义的拦截器一般都是MappedInterceptor,在组成HandlerExecutionChain对象时,就先match下看看是否适用于当前的handler。