占位

从dispatcher说起,方法doDispatch(Map request)的参数request是一个通过解析来报报文新城的map

//获取HandlerExecutionChain,其中封装了handler和List<HandlerInterceptor>
HandlerExecutionChain mappedHandler = getHandler(request);

1.根据request得到一个执行链,查找的基础是已经注册过,注册之后在DefaultAnnotationHandlerMapping的实例中,handlerMap里(定义在其抽象父类里),保存了transaction与handler的对应关系

所以去的时候也是取这个map里面进行查找

HandlerAdapter ha = getHandlerAdapter(executionChain.getHandler());

protected HandlerAdapter getHandlerAdapter(Object handler) {for (HandlerAdapter ha : this.handlerAdapters) {if (ha.supports(handler)) {return ha;}}ExceptionHandler.throwExcep("00000002",null);return null;
}

2.根据handler得到适配器,实际上在SpringMVC里面,这一步handlerAdapter有许多实现,所以每一个都要判断一下是否supports(handler),但我其实就只有一个AnnotationMethodHandlerAdapter

而所谓是否支持,也只是看其持有的HandlerMethodResolverImpl的handlerMethod是否为空

这类需要重点说明,HandlerMethodResolver这个类:

1.其内部持有一个private final Map<Class<?>, HandlerMethodResolverImpl> methodResolverCache 这样一个MAP

2.该类主要的工作,是通过getMethodResolver方法,返回一个MethodResovler,返回之前,每个MethodResolver和传进来的handler的对应关系都存放在上面这个methodResolverCache 中

3.每个handler都会对应一个全新的HandlerMethodResolverImpl的实例,

4.每个MethodResolver内部持有一个名叫handlerMethods的Set,其中存放了handler中所有被@TransactionMapping注释的Method对象

也许将来我又多个Adapter的实现,便能轻松实现扩展,但目前我觉得好像没有这方面的需求

得到适配器之后,就是执行了,执行这一步反而是比较简单的,无非就是反射,而使用反射的原因,主要是低耦合设计,handler在adpater内部是使用Object来引用的

转载于:https://www.cnblogs.com/heben/p/7183380.html

springbank 开发日志 springbank是如何执行一个handler的requestMapping对应的方法的相关推荐

  1. PHP开发日志 ━━ php、javascript生成二维码的三种方法

    最简单最实例的goolge开源方法 推荐手册:php完全自学手册 1.google开放api 代码如下: $urlToEncode="http://www.helloweba.com&quo ...

  2. 趣好玩开发日志 03-day

    趣好玩开发日志 03-day 控件剖析 一个控件组成 矩形框:控件自己的显示位置和尺寸 内容:控件内部的东西,比如子控件 bounds:以控件自身内容的左上角为坐标原点,计算出来得矩形框位置和尺寸(一 ...

  3. 以ABP为基础架构的一个中等规模的OA开发日志

    前言: 最近园子里ABP炒的火热.看了几篇对于ABP的介绍后,深感其设计精巧,实现优雅.个人感觉,ABP或ABP衍生品的架构设计,未来会成为中型Net项目的首选架构模式.如果您还不了解ABP是什么,有 ...

  4. 一个小台灯 之 微信小程序开发日志

    微信小程序开发日志 小程序只能使用https和后台服务器进行post请求和get请求,使用https的连接需要的微信小程序的后台对域名进行备份. 在备份的时候也只能通过域名,不能通过公网IP备份. 一 ...

  5. MySQL开发 日志文件必备的知识点

    MySQL 日志文件开发必备的知识点 参考来源:juejin.im/post/5b7c0aabf265da438415b9eb 前言 日志文件记录了影响MySQL数据库的各种类型活动,MySQL数据库 ...

  6. ue4 无限地图_RPG游戏开发日志13:无限地图的实现

    写在前面 本项目同步上传于coding上,国内读者可以通过在coding下载项目. 也欢迎你加入我的UE4学习交流QQ群:872537977.如果你喜欢我写的文章,也希望你点赞.收藏.转发.谢谢! 如 ...

  7. .NET Core开发日志——配置

    .NET Core开发日志--配置 原文:.NET Core开发日志--配置 熟悉ASP.NET的开发者一定对web.config文件不陌生.在ASP.NET环境中,要想添加配置参数,一般也都会在此文 ...

  8. .NET Core开发日志——RequestDelegate

    本文主要是对.NET Core开发日志--Middleware的补遗,但是会从看起来平平无奇的RequestDelegate开始叙述,所以以其作为标题,也是合情合理. RequestDelegate是 ...

  9. .NET Core开发日志——从ASP.NET Core Module到KestrelServer

    ASP.NET Core程序现在变得如同控制台(Console)程序一般,同样通过Main方法启动整个应用.而Main方法要做的事情很简单,创建一个WebHostBuilder类,调用其Build方法 ...

最新文章

  1. Java VisualVM插件地址
  2. mysql下 ect p_Linux系统下启动MySQL的命令及相关知识
  3. linux shell 提示符设置
  4. Oracle RMAN 表空间恢复
  5. easyui edatagrid 触发编辑行回掉onEdit
  6. Leetcode 1559二维网格图中探测环 技巧DFS|剪枝
  7. opencv源码查看
  8. 学习笔记01:《开放平台产品成长之路-POP》
  9. 决策树剪枝算法(二)
  10. python 安装第三方库,超时报错--Read timed out.
  11. Cobalt Strike神器使用教程
  12. Bandicam(班迪录屏)破解注册机
  13. 百度大脑iOCR助力财务报销智能化,省时省力
  14. MyBatisCodeHelper-Pro2.8.2
  15. typhon (lazarus) 下文件拖放操作
  16. 绪论——信息理论学与量子信息学
  17. Hilbert各种概念一览
  18. BT下载到底是什么意思啊?
  19. Java中List集合过滤出符合条件的List元素集合
  20. logstash简介及基本操作

热门文章

  1. 计算机组成原理2010年,2010年计算机组成原理考研试题及解答
  2. .o文件 linux生成,vmlinux.o 生成
  3. EZEMC测试软件_四种常见的EMC仿真软件介绍
  4. PySpark︱DataFrame操作指南:增/删/改/查/合并/统计与数据处理
  5. python import自定义模块方法
  6. maven 把依赖包一起打包
  7. Configure VNC in RHEL 7
  8. 在Vue 项目 webpack 打包中关于 背景图片的路径问题
  9. 中兴通讯:已就处罚事件进行充分沟通 明起复牌
  10. aboutsqlserver.com:mvp