先分3个部分来看下整体的流程图
图1
ServletInvocableHandlerMethod
是 Spring Framework 中对HandlerMethod
的实现。
ServletInvocableHandlerMethod的整体架构图
HandlerMethod 需要
- bean, 即是哪个 Controller
- method ,即是 Controller 中的哪个方法
ServletInvocableHandlerMethod 需要
- WebDataBinderFactory: 负责对象绑定、类型转换
- ParameterNameDiscoverer: 负责参数名解析
- HandlerMethodArgumentResolverComposite: 负责解析参数
- HandlerMethodReturnValueHandlerComposite :负责处理返回值
ServletInvocableHandlerMethod实现了HandlerMethod并扩展了以上功能。
图2
下图是RequestMappingHandlerAdapter工作的一些准备工作:
- 初始化 advice @InitBinder,添加一些自定义类型转换器
- 初始化advice @ModelAttribute,生产模型数据
- 将第2步的模型数据添加到ModelAndViewContainer
图3
RequestMappingHandlerAdapter的执行流程,主要做了三件事