【发布时间】:2020-03-29 10:39:59
【问题描述】:
假设我有一个用 @Controller 注释的类,以及像这样的实例方法的相应映射。
@Controller
@ResponseBody
public class UserController {
@GetMapping("/example")
public User fetchUserExample() {
// ...
}
}
另外,假设有 1000 个像上面这样具有不同 URL 映射的控制器。 我调用说任何 URL 和相应的控制器被找到,相应的方法被调用并返回响应。
但我感到困惑的是,dispatcherServlet 究竟是如何知道它在哪里可以找到请求的 URL 的方法的?它是否会逐个扫描每个控制器类以寻找匹配项,并且是否对每个请求都执行此操作?如果是这样,这似乎不是一个有效的方法。
我知道我们也可以注释类,但这仍然不能回答问题,因为它仍然需要扫描类以查找匹配项。
我希望它能保持某种关于控制器及其各自映射的跟踪。
我为此搜索了很多,但几乎无论我走到哪里,都只浏览了@GetMapping, @RequestMapping 等注释告诉它要调用的方法的表面。但我们知道。 dispatcherServlet 是如何首先确定类的还是遵循我上面写的方法?
有些网站提到了 HandlerMapping, SimpleControllerHandlerAdapter, RequestMappingHandlerAdapter 之类的东西,但由于我是 Spring 新手,所以这些东西对我来说没有意义,它们是如何出现在这里的。
我们将不胜感激。
【问题讨论】:
标签: spring servlets model-view-controller dispatcher