在RequestMappingHandlerAdapter.afterPropertiesSet--->getDefaultArgumentResolvers方法中,先往argumentResolvers属性中添加默认的一批去处理有注解的参数,再添加一批处理特定对象类型的参数,此时还剩下的就是其他对象类型的参数没有处理,那么接下来的优先级正好是添加用户自定义的customArgumentResolvers,在这里可以自定义一个赋值参数的解析器。最后是添加RequestParamMethodArgumentResolver和ServletModelAttributeMethodProcessor两个,前者是处理@RequestParam、@RequestPart和基础类型的,后者是处理@ModelAttribute注解和其他所有非基础类型的。但是注解和类型之间各有个开关,在上面说的第一批添加的时候也添加了这两个类,只不过开关是开启的,所以只处理注解,不处理类型。
所以我们自定义的argumentResolver是优先级高于最后两个的。这个道理和SpringMVC返回值处理中的HttpMessageConverter是一样的