@RequestMapping 在 Spring Boot 内部如何工作?

2024-01-09

@RestController
@RequestMapping("/employee")
public class Employee {
  @RequestMapping("/save")
  public void saveEmployee() {
    // saving employee
  }
}

如何@RequestMapping将在内部工作以将请求映射到saveEmployee method?


在应用程序启动期间,Spring将识别所有Bean通过 XML 配置、Java 配置或组件扫描的方式并将它们存储在ApplicationContext.

Spring Boot 为您自动配置许多 Bean,包括请求映射处理程序映射 https://github.com/spring-projects/spring-boot/blob/fe1eb8b5f3ce4975bcbbb2a83192e84b32776175/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration.java#L402.

当这个 Bean 是已初始化 https://github.com/spring-projects/spring-framework/blob/5f074343607bd156646c30b5226152d60ec506dd/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMethodMapping.java#L193-L219它扫描 ApplicationContext 中是否有任何带有注释的 Bean@Controller.

然后它迭代每个Controller豆和looks https://github.com/spring-projects/spring-framework/blob/5f074343607bd156646c30b5226152d60ec506dd/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerMapping.java#L204-L209对于带有注释的方法@RequestMapping。最后,它将这些映射/处理程序对保存在映射注册表 https://github.com/spring-projects/spring-framework/blob/5f074343607bd156646c30b5226152d60ec506dd/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMethodMapping.java#L475-L670

The DispatcherServlet是您的应用程序的中央 HTTP 请求处理程序,它将search https://github.com/spring-projects/spring-framework/blob/5f074343607bd156646c30b5226152d60ec506dd/spring-webmvc/src/main/java/org/springframework/web/servlet/DispatcherServlet.java#L570-L601 the ApplicationContext对于任何实现了HandlerMapping接口,其中RequestMappingHandlerMappingBean 确实如此(通过继承的方式)。

然后它迭代这些 bean,要求它们解析该请求的相应处理程序。这RequestMappingHandlerMappingbean 将通过以下方式解析处理程序寻找 https://github.com/spring-projects/spring-framework/blob/5f074343607bd156646c30b5226152d60ec506dd/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMethodMapping.java#L503-L505 its MappingRegistry.

当找到匹配时,处理程序方法最终会被调用invoked https://github.com/spring-projects/spring-framework/blob/5f074343607bd156646c30b5226152d60ec506dd/spring-webmvc/src/main/java/org/springframework/web/servlet/DispatcherServlet.java#L967.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

@RequestMapping 在 Spring Boot 内部如何工作? 的相关文章

随机推荐

  • 更改 networkx 多重图中的边属性

    在多重图中 每次调用 add edge a b weight 1 都会在节点之间添加一条新边a and b 构建图表时 是否可以修改此权重a and b又被发现了 现在我检查 a b 或 b a 是否连接 然后必须delete边缘 以及ad
  • Java 中 % 运算符和 IEEEremainder() 方法之间的区别(如果有的话)?

    在 Java 中 使用 运算符获取整数除法 x y 的余数与 Math IEEEremainder x y 方法之间是否存在功能或性能差异 除了 John B 已经指出的类型差异之外 语义上也存在显着差异 Math IEEEremainde
  • 当应用程序在后台运行时,如何对 Core Data iCloud 同步通知采取行动?

    我有一个 iOS 应用程序 它使用 Core Data 和 iCloud 同步 该应用程序运行完美 并且可以跨多个设备同步 作为我的实现的一部分 我的应用程序注册为 NSPersistentStoreCoordinatorStoresDid
  • 如何在 iOS 上读取、修改和写入 PDF (CGPDFDocument)?

    我正在尝试修改 iOS 上现有 PDF 的 PDF 元数据 标题 作者等 虽然很容易找到用于 PDF 解析和从头开始创建 PDF 的示例代码 但似乎没有一种简单的方法可以将现有 PDF 转储到新文件中 并稍微修改它 更具体地说 如何获取阅读
  • 最长最大重复子串

    子串的长度可以是 1 2 3 我试图解决的问题涉及找到出现次数最多的子字符串 所以它基本上分解为寻找具有最大频率的字符 然而 我发现我可以使用后缀树在 O n 中找到最长的重复子串 但是 后缀树返回子字符串 并优先考虑长度 我想找到出现次数
  • 如何在文件顶部添加新的文本行?

    我正在开发一个简单的程序 使Python脚本可执行 并且我正在添加解释器路径的部分 usr bin python 我尝试这样做 但它没有添加新行 而是替换了当前的行and删除下一行的一部分 我做错了什么 我将源代码上传到Ubuntu Pas
  • Swift - 压缩视频文件

    所以 目前我正在使用它来压缩视频 func compressVideo inputURL NSURL outputURL NSURL handler session AVAssetExportSession gt Void let urlA
  • 使用 min/max 时的任何差异都发生在序列而不是元素级别

    我的意思是是否存在以下情况
  • 如何从另一个项目导入.java并在android中导入包

    我们正在大学里开展一个项目 项目 A 该项目必须从多年前制定的另一个项目 项目 B 的课程中扩展出来 这是在 Eclipse 下工作 并为 android 开发应用程序 所以这实际上是我们正在讨论的活动 到目前为止我已经尝试过这个 将项目
  • 嵌套 CSS 样式?

    这样的事情可能吗 imgbox hover ui resizable se some style 或者概念上的等价物 基本上 只有当某个类的元素悬停在上面时 才会出现某个元素within该类应该改变一些风格 你可以这样做 imgbox ho
  • 我们应该在 Rails Factory 中使用 Faker 吗?

    I love Faker https github com stympy faker 我在我的seeds rb一直用真实的数据填充我的开发环境 我也刚刚开始使用工厂女工 https github com thoughtbot factory
  • 在 Android 中使用 color 和 color.darker?

    好的 我的应用程序中有一个整数变量 它是颜色的值 由颜色选择器根据我的喜好设置 现在 我需要使用该颜色和任何颜色的深色版本 现在我知道在标准 Java 中有一个 Color darker 方法 但在 Android 中似乎没有等效的方法 有
  • Linq 中的 SQL LIKE

    在添加这个问题之前 我确实在 stackoverflow 上搜索过类似的问题 但我找不到 互联网上的大多数问题都使用 LIKE 和字符串 例如 LIKE ABC 但我需要与不同表的现有列进行比较 我需要为 select 语句编写一个 lin
  • spring boot org.springframework.beans.factory.BeanCreationException:无法自动装配字段:

    我从 spring boot 开始 遇到一些配置问题 我无法自动装配某些服务 我收到 BeanCreationException 我的应用程序类 SpringBootApplication EnableAutoConfiguration C
  • 活动没有选项菜单

    我试图模拟点击菜单项存在于Toolbar using 机器人电动 使用以下代码 ShadowActivity shadowActivity Shadows shadowOf activity shadowActivity clickMenu
  • 如何查看导致 LINQ to SQL 中的 SubmitChanges 错误的 sql?

    我有一些 LINQ to SQL 有时会抛出 无法在具有唯一索引的对象 dbo Table 中插入重复的键行 IX Indexname 该语句已终止 有什么方法可以打开日志记录或至少调试数据上下文以查看引发错误时正在执行的 sql 吗 Up
  • 如何从文档中删除所有肖像图片

    我正在对文档图像进行 OCR 处理 我想检测所有图片并从文档图像中删除 我想保留文档图像中的表格 一旦我检测到图片 我就会将其删除 然后进行 OCR 我试图找到轮廓试图检测所有更大的区域 不幸的是它也检测到表格 还如何删除在文档图像中保留其
  • 通过 Python 代码使用 SignalR 服务器

    将 Python 与 SignalR 集成有哪些选项 Python 代码是大型第三方产品的一部分 与语言偏好无关 SignalR 服务器提供对现有 NET 产品的订阅 我们希望通过 Python 重用 NET SignalR 服务器 pyt
  • Java中如何随机选择图片?

    我正在制作一个将使用以下代码的程序 JLabel MyImage new JLabel new ImageIcon image1 png 但是 我想让随机图片出现 比如 image2 image3 image4 我该如何做到这一点 不使用L
  • @RequestMapping 在 Spring Boot 内部如何工作?

    RestController RequestMapping employee public class Employee RequestMapping save public void saveEmployee saving employe