jadestoner

导航

 

今天写接口,记录个想到的小问题:
我们在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。


posted on 2021-02-07 14:34  jadestoner  阅读(419)  评论(0编辑  收藏  举报