spring mvc参数解析 (三)HandlerMethodArgumentResolver
前面分析到WebDataBinderFactory 创建,实际是创建一个ServletRequestDataBinderFactory实例。
解析参数的方法是在父类实现了ModelAttributeMethodProcessor
从图中可以看出类的继承关系。
实际的解析方法是
ModelFactory.getNameForParameter(parameter);先用静态方法获取当前参数的名称
点进去可以发现
如果当前参数有被@ModelAttribute 标记并且有value则使用value的值。如果不是
则最终的逻辑在这个方法里面,首先判断是不是数组,在判断是不是集合,最后去当前类的shortClassName 例如com.example.User 则最终为user.
以上只是获取当前参数的name。
接着判断mvcontain是否含有以之前获得name为key的value,如果有则直接使用该value,如果没有则创建一个value
具体看创建webdatabinder过程
从这里看出只有
DefaultDataBinderFactory有实现这个方法
这里主要有三步
第一步 直接创建dababinder,
第二步用initializer初始化,这个后续讲
这里主要看第三步
这里的第三步主要是通过反射执行之前的@InitBinder方法包括@ControllerAdvice和当前controller。
到此就将webdatabinder创建完成。