@ModelAttribute 可以修饰方法与目标方法中的参数
- 修饰方法:
1). 被修饰的方法会在调用目标方法前调用
2). 在被修饰的方法中使用 HashMap、Model、ModelMap 存入键值对,springmvc都会将数据存入模 型数据当中;源码表示在进入@ModelAttribute修饰的方法中,会先实例出mav容器,之后往容器中放入数据
- 修饰目标方法中的参数
1). 首先@ModelAttribute要确定一个key去springmvc中找与该key对应的值,先说如何确定;如果@ModelAttribute指定了key,就如图上的 “person”,那 person 就是key;如果未指定,形如public String update(Person person)
,那么就将参数的类名Person
的第一个变字母小写作为key,就是person
2). key确定了,@ModelAttribute根据key先去 mavContainer 中寻找值,有就赋予给目标方法的形参,没有会判断Controller是否用 @SessionAttribute 修饰,如果修饰了则进入session中寻找有无值,没找到会抛异常,如果Controller没被 @SessionAttribute 修饰,则用反射new出一个形参对象,进而形参会被赋予 request 当中进行转发