阅读本文需要 5 分钟 tips:本文属于 Spring MVC 请求流程 - 基于源码解读 的小分支
DEBUG
在org.springframework.web.servlet.DispatcherServlet#getHandler处打断点 发现处理器映射器有两个:
BeanNameUrlHandlerMappingRequestMappingHandlerMapping
进入 getHandler 方法,这个方法主要是先尝试获取 handler,然后再获取拦截器,返回执行链,这里我们把注意放在获取 handler 的方法上面,也就是 getHandlerInternal
进入 getHandlerInternal 方法,从当前请求解析出要查找的url,然后继续寻找 handler
第一个处理器处理器映射器进入了 AbstractUrlHandlerMapping 的 getHandlerInternal,但结果为null
第二个处理器映射器进入了 AbstractHandlerMethodMapping 的 getHandlerInternal,找到了handler 对于为什么第二个处理器能获取到 handler ,可以看到 urlLookup 存储了要查找的 urlPath,两者能匹配