摘要: 对于 RequestMappingHandlerMapping 而言,getHandler 就是要找一个最最匹配的 HandlerMethod 对象。 这个寻找最佳匹配 HandlerMethod 的逻辑就“藏”在 lookupHandlerMethod 中,主要步骤如下:第一步,用请求的 url 路径获取 RequestMappingInfo 列表(“url索引匹配”);若匹配不上,只能全量遍历所有 RequestMappingInfo。第二步,完全匹配 RequestMappingInfo 和 HttpServletRequest。匹配逻辑在 RequestMappingInfo#getMatchingCondition 中。第三步,对匹配结果 Match 排序,选出最佳的 HandlerMethod,排序比较的逻辑在 RequestMappingInfo#compareTo 中。 阅读全文
posted @ 2020-11-29 22:24 极客子羽 阅读(459) 评论(0) 推荐(0)
摘要: RequestMappingHandlerAdapter 是 SpringMVC 实现 参数解析 和 结果集处理 的核心类之一。其中,解析参数的接口为 HandlerMethodArgumentResolver;处理结果集的接口为 HandlerMethodReturnValueHandler。RequestMappingHandlerAdapter 实现了 InitializingBean,因此初始化的过程在 afterPropertiesSet() 方法中。在 getDefaultArgumentResolvers() 方法中,我们可以找到各种各样常见的参数是如何解析的。另外,在 getDefaultReturnValueHandlers() 方法中,我们可以找到各种各样常见的返回值是如何处理的。 阅读全文
posted @ 2020-11-29 12:36 极客子羽 阅读(674) 评论(0) 推荐(1)
摘要: 考虑到篇幅安排,本文主要针对HandlerMapping初始化部分进行讲解。 初始化 HandlerMethod 的过程:1. 扫描 Spring 容器中的所有 Controller Bean; 2. 找出 Controller Bean 中的所有方法; 3. 创建 RequestMappingInfo; 4. 创建 HandlerMethod; 5. 注册到 MappingRegistry 阅读全文
posted @ 2020-11-29 12:30 极客子羽 阅读(1068) 评论(0) 推荐(1)