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实现具体的逻辑