上一页 1 ··· 15 16 17 18 19 20 21 22 23 ··· 26 下一页
摘要: 在 Web 应用启动时,@RequestMapping 注解解析成 RequestMappingInfo 对象,并且注解的每个属性都解析成一个对应的 RequestCondition。 通过对条件的筛选,选出符合条件的 RequestMappingInfo,如果包含多个 RequestMappingInfo,需要对条件进行排序,再选出优先级最高的一个 RequestMappingInfo。 最后再通过 RequestMappingInfoHandlerMapping 获取对应的 HandlerMethod ,然后就可以封装执行过程了。 阅读全文
posted @ 2020-12-23 20:22 极客子羽 阅读(3020) 评论(1) 推荐(0)
摘要: 对于 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)
摘要: 如果你也有以下疑问?那么就一起来看看这篇引导篇吧 1. 被 @RequestMapping 注解的方法是如何“注册”到 DispatcherServlet 中的? 2. 在 http 请求到达服务器之后,又是如何找到“合适”的被 @RequestMapping 注解的方法? 3. http 请求的参数是如何变为 @RequestMapping 方法中的参数的? 4. @RequestMapping 方法的返回值又是如何变成我们期望的网页或者内容的? 阅读全文
posted @ 2020-11-28 09:06 极客子羽 阅读(647) 评论(0) 推荐(0)
摘要: LRU 是 Least Recently Used 的缩写,即最近最少使用。Java中常常用 LinkedHashMap 来实现 LRU 缓存淘汰。本文给大家展示一下 SpringMVC 框架和 MyBatis 框架是如何做的。 阅读全文
posted @ 2020-11-24 20:10 极客子羽 阅读(676) 评论(0) 推荐(0)
摘要: 本文主要讲解在 SpringMVC 框架中,DispatcherServlet 分发 Http 请求到对应处理器的流程。doDispatch 的主要流程就是 获取处理器 getHandler, 获取处理器适配器 getHandlerAdapter,执行处理器适配器的 handle 方法。 其中,getHandlerInternal 因子类的不同,而有二类不同的行为,一类是 AbstractUrlHandlerMapping,另一类是AbstractHandlerMethodMapping 阅读全文
posted @ 2020-11-20 15:16 极客子羽 阅读(710) 评论(0) 推荐(0)
摘要: BeanNameUrlHandlerMapping 和 SimpleUrlHandlerMapping 同属于 AbstractUrlHandlerMapping 的子类,他们都有 URL 映射处理器的能力。 BeanNameUrlHandlerMapping 筛选出 Name 或者 别名以 "/" 开头的 Bean ,将这些 Bean 注册为 “Handler”,实现 URL 映射。这种方式在配置上会比 SimpleUrlHandlerMapping 要便利一些。 阅读全文
posted @ 2020-11-17 15:42 极客子羽 阅读(1706) 评论(0) 推荐(0)
摘要: SimpleUrlHandlerMapping 的关键成员变量是 urlMap,可以通过 setMappings 或者 setUrlMap 增量添加。其父类 AbstractUrlHandlerMapping 的关键成员变量是 handlerMap,可以通过 registerHandler 注册 url 和 “Handler” 对象的映射。“Handler”对象主要有四类:HandlerMethod,Servlet ,Controller,HttpRequestHandler 阅读全文
posted @ 2020-11-17 10:00 极客子羽 阅读(2113) 评论(0) 推荐(0)
摘要: 如果配置了监听器 ContextLoaderListener ,那么会创建一个 “root WebApplicationContext”。 如果配置了多个 FrameworkServlet 及其子类,会为它们中的每一个创建一个 “local WebApplicationContext” 阅读全文
posted @ 2020-11-16 17:26 极客子羽 阅读(1414) 评论(0) 推荐(0)
上一页 1 ··· 15 16 17 18 19 20 21 22 23 ··· 26 下一页