gpt4 book ai didi

java - Spring 的 @RequestMapping 内部结构

转载 作者:行者123 更新时间:2023-12-02 00:15:16 25 4
gpt4 key购买 nike

我正在构建一个具有多个 Maven 工件的应用程序。由于设计限制,其中一个工件本质上是后端,无法访问请求(因此不允许使用@RequestMapping)。但现实情况是,有些请求需要直接连接到其中一些类方法。

我在 Spring 进行了一些深入研究,发现了让它发挥作用所需的一半内容。最简单的部分是自己编写一个 HandlerMapping 并正确配置它。该映射器将了解后端实体以手动映射必要的 URL。

我找不到的部分是 Spring 中的何处(什么)管理调用?例如,当您有:

@Component
@RequestMapping("/mypath")
public class MyStuff
{
@RequestMapping(value = "/dothis", method = RequestMethod.GET)
public ResponseEntity<String> doThis(HttpServletRequest request)
{
}
}

当向/mypath/dothis 发出请求时,哪个对象拦截该请求并调用正确 bean 中的正确方法?据我所知,映射器仅返回映射到特定 bean 的所有 url 的字符串数组。

最佳答案

从高层次来看,这是流程 -Spring 的 DispatcherServlet 首先处理请求 - 这是 web.xml 文件中具有条目的请求。

DispatcherServlet维护一个 HandlerAdapters 和 HandlerMappings 的列表,对于请求,它向每个 handlerMapping 询问一个处理程序

在 Spring 3.1 中,主要的 handlerMapping 实现之一是 RequestMappingHandlerMapping它维护请求 uri 到处理程序的映射(这是一个 HandlerMethod 最终指向 @RequestMapping 映射方法)。

从 HandlerMapping 获取处理程序后,DispatcherServlet 会询问每个 handlerAdapter 是否可以处理该请求(HandlerAdapter.supports api),如果可以,则将请求分派(dispatch)到适当的 HandlerAdapter,最终调用 handlerMethod。在 Spring 3.1 中,主 HandlerAdapter 注册为 <mvc:annotation-driven/>RequestMappingHandlerAdapter

我认为这应该足以开始更深入的调查。跟踪流程的一个好方法是在 DispatcherServlet 中放置一个断点并通过堆栈跟踪流程。

关于java - Spring 的 @RequestMapping 内部结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11977750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com