美文网首页
RequestMappinghandlerMapping分析

RequestMappinghandlerMapping分析

作者: 浪白条 | 来源:发表于2019-05-06 10:45 被阅读0次

    1.类的继承结构

    RequestMappinghandlerMapping继承结构图

    2.handler怎么初始化的?

    整个初始化工作由AbstractHandlerMethodMapping的initHandlerMethods主导.

      1. 使用BeanFactoryUtils扫描应用下的Object或者直接从容器中获取Object

      2. 迭代类,分别判断isHandler判断目标类是否Handler

        2.1 RequestMappingHandlerMapping.isHandler根据@Controller或@RequestMapping注解判断(有任意一个)

      3. 对handler解析出所有需要分发的方法detectHandlerMethods

        3.1 获取原始的Class<?>

        3.2 使用HandlerMethodSelector.selectMethods过滤具体handler method,预留getMappingForMethod模板方法给子类

          RequestMappingHandlerMapping.getMappingForMethod根据类,方法上的RequestMapping注解生成匹配条件RequestMappingInfo

        3.3 对过滤到的每个method进行注册registerHandlerMethod

          a, 使用createHandlerMethod封装处理器为HandlerMethod

          b, 判断之前是否已经匹配条件对应的处理器是否冲突(相同的匹配条件只能有一个对应的处理器)

          c, 设置匹配条件到handler method的映射关系

          d, 从匹配条件中解析出url,并注册到urlMap(url到匹配条件的映射),这边由RequestMappingInfoHandlerMapping.getMappingPathPatterns实现

      4. 对HandlerMethod进行初始化handlerMethodsInitialized,其实现在什么都没做

    在讲初始化之前,我们先来聊聊使用到的一些概念

      1. 映射关系,url到匹配条件RequestMappingInfo,匹配条件到HandlerMethod

      2. 特殊的MultiValueMap,特别在value是个List

      3. 使用到注解@Controller,@RequestMapping

      4. 封装处理器信息的HandlerMethod

      5. 封装各类匹配条件的RequestMappingInfo(诸如pattern,http method,request parameter等)

      6. RequestCondition记录匹配条件

    相关文章

      网友评论

          本文标题:RequestMappinghandlerMapping分析

          本文链接:https://www.haomeiwen.com/subject/mytroqtx.html