SpringBoot中请求响应源码解析(寻找合适的handler)
上文通过源码明白如何寻找handler(Controller method),本文继续深入讲解后续 *** 作即为handler寻找对应的handler适配器
1、了解HandlerAdapterHandlerAdapter是一个接口,有两个函数
一个是supports(Object),返回类型是boolean,判断适配器是否适配对应的handler。
另一个是handle,正式执行并返回ModelAndView.
在该断点处 step into查看有哪些适配器以及如何找到适配器
四种适配器
0、RequestMappingHandlerAdapter:该适配器支持方法上带注解@RequestMapping
1、HandlerFunctionAdapter:该适配器支持函数式编程的xxxxx
2与3很少用到,未深入理解。
经过上述遍历匹配将返回合适的HandlerAdapter到ha
2、执行目标方法找到HandlerAdapter后调用handle方法正式执行,下一个断点定位到此处,查看如何执行目标方法。
在断点处step into进入
step into
step into
参数解析器(我这版本的springBoot中共27种)
举例:如果是第0号的RequestParamMethodArgumentResolver,该解析器用于解析handler中用@RequestParam修饰的参数。
返回值处理器(我这版本的有15个)
举例:如果返回类型是ModelAndView则用下标为0的处理器
当参数全部封装完毕后,定位到下图中的代码,并step into
step into后进入下图代码段,invokeForRequest()用于请求处理
在handler中打断点后重新debug,可以发现invokeForRequest()执行后进入handler中的断点,因此可以断定,invokeForRequest()就是处理请求的方法。在invokeForRequest()上step into
在该断点处step into
解析后的参数值如下:
对应handler中的8个参数
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)