2.HandlerMethodArgumentResolver 参数解析器类

0)继承关系

handlerMethodArgumentResolver、
RequestParam**handlerMethodArgumentResolver、PathVarivablehandlerMethodArgumentResolver、RequestParamMaphandlerMethodArgumentResolver**、共26种
**HandlerMethodArgumentResolverCompositeimage.png

解析的作用:就是给参数赋值的过程。完成参数实例化。
image.png

1)HandlerMethodArgumentResolver

一个参数解析器接口,只有 ** 判断是否支持参数解析参数两种功能,他的实现类包括26种各种参数(比如RequestParam、PathVariable)的解析类,其中还有一个重要的HandlerMethodArgumentResolverComposite**,它里面包含:26种参数解析器集合、参数解析器缓存属性。还有几个很有用的方法

属性:无

操作:主要有两个:supportsParameter()、resolveArgument()

image.png
supportsParameter()主要是给子类实现的,让子类判断自己是否支持解析当前参数。实现也很简单
image.png
resolveArgument() 也是给子类实现的,让子类自己去解析当前参数。(不同的子类有不同的解析方法)
主要看 AbstractNamedValueMethodArgumentResolver里面的
image.png

2)HandlerMethodArgumentResolverComposite:如下,还多了几个功能(最有用的是 根据参数获取其对应解析器)

属性:26种参数解析器集合、参数解析器缓存。

image.png

操作:resolveArgument()和supportsParameter()是必须实现的接口的方法

image.png

getArgumentResolver(),作用:遍历所有的26种解析器,找到适合当前参数的并返回。找不到返回null
image.png

注意,这个方法调用的 supportsParameter()是26种解析器的,不是自身的。

resolveArgument(),作用:调用上面的方法找到合适的解析器,让这个解析器去解析
image.png
supportsParameter(),其实这个方法作用不大,一般用不着,就是调用getArgumentResolver()找合适的解析器,如果找不到,那就说明这个参数没有合适的解析器。则返回false
image.png