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

老污的猫
30 声望5 粉丝