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

How @RequestMapping internally works in Spring Boot?

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

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

在应用程序启动时,Spring会通过XMLConfig、JavaConfig、ComponentScanning等方式识别所有Bean并存入ApplicationContext.

Spring 引导会为您自动配置许多 Bean,包括 RequestMappingHandlerMapping.

当此 Bean 为 initialized 时,它会扫描 ApplicationContext 以查找任何用 @Controller 注释的 Bean。

然后它遍历每个 Controller bean 和 looks for methods annotated with @RequestMapping. Finally it persists these mapping/handler pairs in the MappingRegistry

DispatcherServlet 是您的应用程序的中央 HTTP 请求处理程序,它将 search ApplicationContext 用于任何实现 HandlerMapping 接口的 Bean,HandlerMapping RequestMappingHandlerMapping Bean 确实(通过继承的方式)。

然后它遍历这些 bean,要求它们为这个请求解析相应的处理程序。 RequestMappingHandlerMapping bean 将通过 searchingMappingRegistry.

解析处理程序

找到匹配项后,处理程序方法最终为 invoked