spring mvc controller实现原理

个人博客:进入博客,关注下博主,感谢~

所有博客均在上面博客首发,其他平台同步更新
大家一起进步,多多指教~

在这里插入图片描述

文章目录

  • 前言
  • controller
  • 实现原理
    • 按顺序讲解实现原理
  • 你想往mvc添加自己的实现注解controller

前言

有时是否有些疑问,mvc controller是怎么实现的,或者说有没有需求让你将所有api收集起来,有点像api文档那种?

一般的思路
controller实现方案会有map,来保存url,以及对应调用类、方法、参数。
然后api收集的话,会考虑通过反射,收集对应的注解来拿到这些controller的信息

实际上
controller实现方案也是这么实现的
api信息收集的话mvc已经帮我们实现了,接下来的重点看下spring mvc是怎么实现controller

controller

spring mvc controller实现原理_第1张图片
上面就是我们平时会用到普遍的用法,有post、get请求

实现原理

RequestMappingHandlerMapping
它继承 AbstractHandlerMethodMapping

AbstractHandlerMethodMapping里头有什么?
private final MappingRegistry mappingRegistry
那我们来获取一下,看下药里面塞的是什么葫芦

spring mvc controller实现原理_第2张图片
通过反射来获取实例里头的属性

spring mvc controller实现原理_第3张图片
mapperlookup里面有所有url

spring mvc controller实现原理_第4张图片
再进去,一个循环里头,会有对应的url、bean、方法名,returnType,参数类型等等

那么我们可以知道AbstractHandlerMethodMapping mappingRegistry 有mvc所有请求路径信息!

按顺序讲解实现原理

上面是直接说结果了,所以下面按顺序来梳理下实现原理

  1. AbstractHandlerMethodMapping 实现了 InitializingBean,调用initHandlerMethods方法

  2. 它会遍历所有类
    spring mvc controller实现原理_第5张图片

  3. isHandler方法会去判断是否符合条件,符合的话会处理。有没有很熟悉的注解
    spring mvc controller实现原理_第6张图片

spring mvc controller实现原理_第7张图片

  1. 如果有这样的注解,会跳进detectHandlerMethods方法,会拿到对应方法以及mapping
    spring mvc controller实现原理_第8张图片

  2. registerHandlerMethod方法
    在这里插入图片描述
    spring mvc controller实现原理_第9张图片

  3. 最后往AbstractHandlerMethodMapping registry塞数据,其实也就是我们之前说的结果

你想往mvc添加自己的实现注解controller

  1. 改下AbstractHandlerMethodMapping isHandler方法
  2. 改下构造请求info的方法getMappingForMethod

可以参考

  • 动态生成简约MVC请求接口

你可能感兴趣的:(Spring相关,mvc,spring,java)