spring mvc参数解析 (三)HandlerMethodArgumentResolver

前面分析到WebDataBinderFactory 创建,实际是创建一个ServletRequestDataBinderFactory实例。
解析参数的方法是在父类实现了ModelAttributeMethodProcessor
spring mvc参数解析 (三)HandlerMethodArgumentResolver
从图中可以看出类的继承关系。
实际的解析方法是spring mvc参数解析 (三)HandlerMethodArgumentResolver
ModelFactory.getNameForParameter(parameter);先用静态方法获取当前参数的名称
点进去可以发现spring mvc参数解析 (三)HandlerMethodArgumentResolver
如果当前参数有被@ModelAttribute 标记并且有value则使用value的值。如果不是
spring mvc参数解析 (三)HandlerMethodArgumentResolver
则最终的逻辑在这个方法里面,首先判断是不是数组,在判断是不是集合,最后去当前类的shortClassName 例如com.example.User 则最终为user.
以上只是获取当前参数的name。
接着判断mvcontain是否含有以之前获得name为key的value,如果有则直接使用该value,如果没有则创建一个value
spring mvc参数解析 (三)HandlerMethodArgumentResolver

spring mvc参数解析 (三)HandlerMethodArgumentResolver
具体看创建webdatabinder过程
从这里看出只有spring mvc参数解析 (三)HandlerMethodArgumentResolver
DefaultDataBinderFactory有实现这个方法
这里主要有三步
spring mvc参数解析 (三)HandlerMethodArgumentResolver
第一步 直接创建dababinder,
第二步用initializer初始化,这个后续讲
这里主要看第三步
spring mvc参数解析 (三)HandlerMethodArgumentResolver
这里的第三步主要是通过反射执行之前的@InitBinder方法包括@ControllerAdvice和当前controller。
到此就将webdatabinder创建完成。