spring mvc controller实现原理
讲解spring mvc controller实现原理,以及如果自定义不同注解来简化写各种配置
个人博客:👉进入博客,关注下博主,感谢~
🌈所有博客均在上面博客首发,其他平台同步更新
🏆大家一起进步,多多指教~

前言
有时是否有些疑问,mvc controller是怎么实现的,或者说有没有需求让你将所有api收集起来,有点像api文档那种?
一般的思路
controller实现方案会有map,来保存url,以及对应调用类、方法、参数。
然后api收集的话,会考虑通过反射,收集对应的注解来拿到这些controller的信息
实际上
controller实现方案也是这么实现的
api信息收集的话mvc已经帮我们实现了,接下来的重点看下spring mvc是怎么实现controller
controller

上面就是我们平时会用到普遍的用法,有post、get请求
实现原理
RequestMappingHandlerMapping
它继承 AbstractHandlerMethodMapping
AbstractHandlerMethodMapping里头有什么?
private final MappingRegistry mappingRegistry
那我们来获取一下,看下药里面塞的是什么葫芦

通过反射来获取实例里头的属性

mapperlookup里面有所有url

再进去,一个循环里头,会有对应的url、bean、方法名,returnType,参数类型等等
那么我们可以知道AbstractHandlerMethodMapping mappingRegistry 有mvc所有请求路径信息!
按顺序讲解实现原理
上面是直接说结果了,所以下面按顺序来梳理下实现原理
-
AbstractHandlerMethodMapping 实现了 InitializingBean,调用initHandlerMethods方法
-
它会遍历所有类

-
isHandler方法会去判断是否符合条件,符合的话会处理。有没有很熟悉的注解


-
如果有这样的注解,会跳进detectHandlerMethods方法,会拿到对应方法以及mapping

-
registerHandlerMethod方法


-
最后往AbstractHandlerMethodMapping registry塞数据,其实也就是我们之前说的结果
你想往mvc添加自己的实现注解controller
- 改下AbstractHandlerMethodMapping isHandler方法
- 改下构造请求info的方法getMappingForMethod
可以参考
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)