2019独角兽企业重金招聘Python工程师标准>>>

12 HandlerMapping

12.1 AbstractHandlerMapping

  • 保存所有interceptor
  • 为hanlder添加interceptor

12.2 AbstractUrlHanlderMapping

gethandlerInternal()

通过url找hanlder

  • lookeupHandler()

    • 获取直接映射的(this.handlerMap.get(url))

      • 添加拦截器 PathExposingHandlerInterceptor

        • request添加 BEST_MATCHING_PATTERN_ATTRIBUTE

        • request添加 PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE

        • request添加 INTROSPECT_TYPE_LEVEL_MAPPING(什么东西)

    • 处理带模式匹配的

      • 获取匹配的matchingPatterns
      • patherns排序
      • 多个bestMatch,从中提取url模版变量(应用中什么设置模版变量?)
      • 添加拦截器
        • PathExposingHandlerInterceptor (同上)
        • UriTemplateVariablesHandlerInterceptor

registerHandler()

  • <urlpath, resolvedHanlder> 保存到 this.handlerMap (linkedHashmap)

SimpleUrlHandlerMapping

  • 定义一个urlMap方便配置
  • 自定义的register方法,被initApplicationContext() (WebApplicationObjectSupport方法)调用。

AbstractDetectingUrlHandlerMapping

  • detectHandlersInAncestorContexts 是否从父容器的bean中查找handler

BeanNameUrlHandlerMapping

  • 如果某个bean的名字以“/”开头则,以他为url。

12.3 AbstractHandlerMethodMapping

三个Map

  • handlerMethods pattern->handlerMethod
  • urlMap url->pattern 返回多个pattern,选最优的 (MultiValueMap)
  • nameMap 默认类名里的大写字母组合 + "#" + 方法名 (一般不用), MvcUriComponentsBuilder 根据name获取对应的url
    • 使用RequestMappingInfoHandlerMethodMappingNamingStrategy 从handlerMethod中解析出name。

RequestMappingInfo

七种RequestCondition

initHandlerMethods()

  • 由InitializingBean接口的afterPropertiesSet() 方法调用
  • isHandler() || 判断handler@Controller 或 @RequestMapping
  • detectHandlerMethods()
    • getMappingForMethod(method, userType) || 找到符合handler的methods
    • registerHandlerMethod() || 注册handlerMapping(三个map)
      • MappingRegistry 用于注册

        • 使用ReentrantReadWriteLock (初始化有必要?)

getHandlerInternal()

  • 根据request -> lookupPath
  • lookupPath & Request -> HandlerMethod
  • 如果找到HandlerMethod,返回handlerMethod.createWithResolvedBean() new一个新的实例返回。

转载于:https://my.oschina.net/u/1245414/blog/1580664

《看透SpringMVC》第十二章 HandlerMapping相关推荐

  1. (转)SpringMVC学习(十二)——SpringMVC中的拦截器

    http://blog.csdn.net/yerenyuan_pku/article/details/72567761 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter, ...

  2. Shiro第十二章-与Spring集成、配置文件初解

    简介 Shiro的组件都是Javabean/pojo式的组件,所以非常容易使用Spring进行组件管理,可以非常方便得从ini配置转为Spring配置(如xml配置文件). JavaSE 依赖 < ...

  3. stm32l0的停止模式怎么唤醒_探索者 STM32F407 开发板资料连载第二十二章 待机唤醒实验

    1)实验平台:alientek 阿波罗 STM32F767 开发板 2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第二十二章 待机唤醒实 ...

  4. 构建之法第十,十一,十二章阅读

    第十章经典用户和场景 虽说经典场景和经典用户很有必要去研究去效仿,但是随着时间发展,新的用户新的需求不断涌现,那该怎么平衡? 第十一章软件设计与实现 软件设计过程中,如何管理设计变更呢? 第十二章用户 ...

  5. 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条

    http://blog.csdn.net/terryzero/article/details/3797782 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条 标签: swing编程 ...

  6. stm32 文件系统dma大小_「正点原子NANO STM32F103开发板资料连载」第二十二章 DMA 实验...

    1)实验平台:[正点原子] NANO STM32F103 开发板 2)摘自<正点原子STM32 F1 开发指南(NANO 板-HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 ...

  7. 系统架构师学习笔记_第十二章_连载

    第十二章  系统安全架构设计 12.1  信息系统安全架构的简单描述 信息安全的特征 是为了保证信息的 机密性.完整性.可用性.可控性.不可抵赖性. 以风险策略为基础. 12.1.1  信息安全的现状 ...

  8. 《c++ templates》学习笔记(9)——第十二章 特化与重载

    1       第十二章 特化与重载 1.1    重载函数模板 和一般的函数重载类似,函数模板也可以进行重载,比如下面的两个f,这是两个同名函数,1和2并没有关系,2不是1的局部特化.2是1的一个重 ...

  9. 开发日记-20190915 关键词 汇编语言王爽版 第十二章

    第十二章 内中断 任何一个通用的CPU,比如8086,都具备一种能力,可以在执行完当前正在执行的指令之后,检测到从CPU外部传送过来或内部产生的一种特殊信息,并且可以立即对所接收的信息进行处理.这种特 ...

最新文章

  1. java字符串去重复_Java 8新特性:字符串去重
  2. python手机版做小游戏代码大全-python简单小游戏代码 怎么用Python制作简单小游戏...
  3. javaSE基础04
  4. 想转行到机器学习,学到什么程度,才能找到工作?
  5. Codeforces 989C (构造)
  6. 968. Binary Tree Cameras 监控二叉树
  7. 第二十七期:德国工业4.0眼里“工业互联网”与“智能制造”
  8. 群晖218 修改服务器名称,一次换群晖引发的各种事情——论如何榨干218+的价值【不完全版】...
  9. click Documenting Scripts
  10. 工作两年和研究生两年(专业硕士)有什么差异?
  11. 【基于机器视觉与深度学习的人机对弈机器人——决策篇】
  12. Win7删除GRUB For DOS启动项
  13. 树莓派4B安装windows xp windows 95( windows xp windows 95 for raspberry pi 4B)
  14. 实践系列:分销平台的技术架构
  15. ES6 filter 过滤数组 | 图片onload同步等待获取图片宽高
  16. Stm32中英文手册官网免费
  17. 涉密台式计算机密码可以输入几次,涉密打印机、扫描仪等与涉密计算机之间不采用无线方式连接 - 作业在线问答...
  18. 机敏问答[复变][5] #20210629
  19. ansys workbench中fluent划分网格出现如下错误:The mesh file exporter failed during translation.
  20. (转)Unity3D手游开发实践

热门文章

  1. 从“小”培养AI安全意识:OpenAI开源具有安全约束的RL训练工具
  2. 科学家王海峰:从百度十篇论文入选ACL 2019说起
  3. 初步建立了完整AI产业链,我国AI域累计融资世界第一
  4. 盘点丨MIT教授Poggio:过去23年,机器学习取得了哪些进步
  5. linux的变量用法
  6. Centos7:update-initramfs -u:command not found
  7. 支持向量机(support vector machine)(SVM)(1)
  8. 从1G到5G,从回顾过去到展望未来
  9. 计算机密码行业专题研究:网络安全最大弹性领域
  10. 阿里120页PPT诠释国家“智能+”战略