主要内容:
springboot如何通过HanlderMapping返回HandlerExecutionChain对象, HandlerExecutionChain对象里面封装了处理当前请求的具体handler(Object类型)和关联的拦截器
未涉及以下内容:
1.如何自定义HandlerMapping以及处理程序适配器
2.执行处理器时,springboot对方法参数的解析和对方法返回值的解析
先创建一个映射请求:
@RequestMapping(value = "/hello")
public String hello(){
return "hello";
}
访问请求:
http://localhost:8080/hello
1. 在DispatcherServlet.doDispatch() debug
mappedHandler = getHandler(processedRequest); 用于获取当前请求的处理器handler
2. 进入getHandler(processedRequest)方法, 这个方法就在当前类中
可以看出是通过遍历该类中 this.handlerMappings 集合来寻找合适的 HandlerMapping, 当前集合中的值如下图所示:
这些都是 HandlerMapping接口 的实现类
HandlerMapping接口作用:
用于定义请求和处理程序对象之间映射关系,也就是返回一个 HandlerExecutionChain 对象,如果返回为null,就表示该 HandlerMapping 不能找到请求的映射关系,就会继续遍历循环
3. 进入mapping.getHandler(request)
可以看出第一个 handlerMapping 对象就是 RequestMappingHandlerMapping, handler表示具体的处理器, RequestMappingHandlerMapping返回的handler是HandlerMethod类型,里面封装了方法的相关信息
4. 进入getHandlerInternal(request)
/**
* 查找给定