码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • springmvc中DispatcherServlet关键对象


    目录

    RequestMappingInfo

    HandlerMapping

    HandlerMethod

    HandlerAdapter

    HandlerExecutionChain


    以下代码为 spring boot 2.7.15 中自带的 spring 5.3.29

    RequestMappingInfo

    请求方法相关信息封装,对应的信息解析在 RequestMappingHandlerMapping 的 createRequestMappingInfo() 中实现。

    对于 @RequestMapping 赋值的相关信息进行解析

    1. protected RequestMappingInfo createRequestMappingInfo(
    2. RequestMapping requestMapping, @Nullable RequestCondition customCondition) {
    3. RequestMappingInfo.Builder builder = RequestMappingInfo
    4. .paths(resolveEmbeddedValuesInPatterns(requestMapping.path()))
    5. .methods(requestMapping.method())
    6. .params(requestMapping.params())
    7. .headers(requestMapping.headers())
    8. .consumes(requestMapping.consumes())
    9. .produces(requestMapping.produces())
    10. .mappingName(requestMapping.name());
    11. if (customCondition != null) {
    12. builder.customCondition(customCondition);
    13. }
    14. return builder.options(this.config).build();
    15. }

    HandlerMapping

    实现类为 RequestMappingHandlerMapping

    保存了请求路径与 RequestMappingInfo 的关系,最终在 AbstractHandlerMethodMapping 的内部类 MappingRegistry 中保存。

    HandlerMapping相关实现类

    相关的路径信息在 AbstractHandlerMethodMapping 中实现,由于实现了接口 InitializingBean,在 spring ioc 容器创建完后进行 bean 初始化时进行路径解析处理,最终解析为 RequestMappingInfo 对象,保存到 AbstractHandlerMethodMapping 的内部类 MappingRegistry 中。

    HandlerMethod


    保存信息如下
    bean
    bean 名称

    beanType
    bean 类型

    method
    bridgeMethod
    方法类型

    HandlerAdapter

    实现类为 RequestMappingHandlerAdapter

    最终请求处理类

    HandlerExecutionChain

    handler
    保存了 HandlerMethod 信息

    interceptorList
    HandlerInterceptor 实现类

    请求过程通过 HandlerExecutionChain 中的 HandlerMethod 进行流转,最终请求在 InvocableHandlerMethod 中通过反射调用对应 controller 的方法。

    HandlerMethod继承类
  • 相关阅读:
    如何将Python程序打包并保护源代码
    微信整合CRM系统的好处
    Java23种设计模式
    解析Spring中的循环依赖问题:初探三级缓存
    C语言 if分支结构
    【移植代码】matlab.engine报错、numpy+mkl安装、Qt platform plugin报错总结
    《龙湖地产》企业门户网站前端设计(Html,CSS,JavaScript,jQuery)
    7000字+24张图带你彻底弄懂线程池
    AIR32F103(四) 27倍频216MHz,CoreMark跑分测试
    【逗老师的无线电】Debian Linux手工编译安装MMDVM
  • 原文地址:https://blog.csdn.net/zlpzlpzyd/article/details/133499304
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号