码农知识堂 - 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继承类
  • 相关阅读:
    REACT
    MUTISIM仿真 译码电路设计
    PHP调用java class 类实现文件签名
    Feign实现动态URL
    Linux单列模式实现线程池
    ABAP 设置开票后不允许修改采购订单价格
    用瀑布线分析伦敦银今日走势
    计算机毕业设计源码丨基于java的企业人力资源(人事)管理系统
    Y4455芯片开发的433遥控流水灯方案
    ASO优化之通过页面的优化来提升排名
  • 原文地址:https://blog.csdn.net/zlpzlpzyd/article/details/133499304
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号