共计 943 个字符,预计需要花费 3 分钟才能阅读完成。
HandlerMethodArgumentResolver
Spring 的参数解析器顶层接口,将 HttpServletRequest(header + body 中的内容) 解析为对应参数类型的对象,其中定义了 2 个方法
public interface HandlerMethodArgumentResolver {
// 是否支持解析该参数
boolean supportsParameter(MethodParameter parameter);
// 解析参数
Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception;
}
Spring 启动时默认加载的 HandlerMethodArgumentResolver 实现类
- RequestAttributeMethodArgumentResolver
- SessionAttributeMethodArgumentResolver
- ServletRequestMethodArgumentResolver
- ServletResponseMethodArgumentResolver
- RedirectAttributesMethodArgumentResolver
- ModelMethodProcessor
HandlerMethodArgumentResolver 的设计模式
- 策略模式:顶层 HandlerMethodArgumentResolver 定义解析参数的方法,根据不同得策略实现对应的子类
- 责任链模式:HandlerMethodArgumentResolverComposite.
argumentResolvers 循环遍历解析器,能解析则直接解析,不能则向下传递
- 模版模式:AbstractMessageConverterMethodArgumentResolver 中定义解析参数的主逻辑, 子类 HttpEntityMethodProcessor | RequestResponseBodyMethodProcessor 实现具体的逻辑
正文完