SpringMVC之RequestMapping执行过程(引导篇)

写在前面

接在上一篇博客 SpringMVC框架中DispatcherServlet分发请求给对应处理器的流程 之后,我们就要开始逐步揭开我们最常用的 @RequestMapping 注解的神秘面纱。

  1. 我们将一起了解被 @RequestMapping 注解的方法是如何“注册”到 DispatcherServlet 中的?

  2. 在 http 请求到达服务器之后,又是如何找到“合适”的被 @RequestMapping 注解的方法?

  3. http 请求的参数是如何变为 @RequestMapping 方法中的参数的?

  4. @RequestMapping 方法的返回值又是如何变成我们期望的网页或者内容的?

DispatcherServlet 分发时序图

从左向右看,当我们向 SpringMVC 服务器发起一个请求时,会进入到 DisptacherServlet # doDispatch 中。

  1. 获取处理器:调用 DisptacherServlet # getHandler,根据 HttpServletRequest 推断出我们需要的“处理器对象”,最终返回 HandlerExecutionChain 对象。
public class HandlerExecutionChain {
      // 处理器对象
      private final Object handler;
      /**
       * Return the handler object to execute.
       * 正因为是 Object 对象,才需要适配器来对应
       */
      public Object getHandler() {
            return this.handler;
      }
}
  1. 获取适配器:接着调用 DisptacherServlet # getHandlerAdapter,为处理器对象 HandlerExecutionChain # handler 选择出一个支持处理该对象的适配器。

  2. 执行适配器/处理器:本文中选出的适配器是 RequestMappingHandlerAdapter,现在就调用该适配器的 handle 方法

MappingRegistryAbstractHandlerMethodMapping<T> 的一个内部类,用来存放 url 和 HandlerMethod 的对应关系,RequestMappingInfo 和 HandlerMethod 的对应关系等,方便根据 url 来获取对应的方法。

总结

小结一下,我们现在可以知道,想要解决开篇的问题,要去哪里找源码和寻求答案了!

如果我们想知道 HttpServletRequest 和 HandlerMethod 的对应关系扫描注册匹配获取,我们可以去 RequestMappingHandlerMapping 中去寻找。

如果我们想知道 参数处理结果集处理 的逻辑,我们可以去 RequestMappingHandlerAdapter 中去寻找。

更多篇章

posted @   极客子羽  阅读(629)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示