HandlerMethodArgumentResolver

2次阅读

共计 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 实现具体的逻辑
正文完
 0