详解SpringMVC注解@ModelAttribute
1、使用@ModelAttribute注解非请求方法(即非@RequestMapping方法)主要有分两种场景:
1.注解无返回值的方法;2.注解有返回值的方法
使用@ModelAttribute方法的这两种场景都会先于@RequestMapping注解的方法,如果有多个方法用@ModelAttribute标记,则会根据标记顺序依次执行。

2、1.注解无返回值的方法
在下面代码中在进入@RequestMapping注解test1方法前,会首先调用@ModelAttribute注解的initialModeAttribute方法,如下图所示,在进入test1方法时model中已经有了initialModeAttribute方法设置的studentInfo的对象。


3、2.注解有返回值的方法
和注解有返回值的方法类型相似,SpringMVC也会将返回值注入到Model中,注入的value值默认为对象的小写字母,当然也可以通过在@ModelAttribute中指定value,如下图所示指定value为studentInfoWithReturnValue,可以看到注解有返回值的方法时,此方法也会优先于@RequestMapping注解的方法先执行。

1、使用@ModelAttribute注解方法的参数是最常用的场景,这种场景需要在方法上添加@RequestMapping注解。
主要有两种使用场景:1.在视图中创建一个对象 2.从视图中获取一个对象

2、1.在视图中创建一个对象
在参数上加上@ModelAttribute注解可以在模型中创建一个对象,如下图所示,通过@ModelAttribute("studentInfo") 可以在model中创建一个studentInfo对象。
通过System.out.println(model.asMap().get("studentInfo").toString());命令可以打印中model中的studentInfo对象信息。

3、2.从视图中获取一个对象
参考【栏目一】中【步骤2】中的方法利用@ModelAttribute注解方法给Model中创建一个对象studentInfoWithReturnValue,然后在test1方法中通过@ModelAttribute(value = "studentInfoWithReturnValue") Student student可以获得Model中注入的对象studentInfoWithReturnValue

1、用@ModelAttribute注解@RequestMapping方法的场景很少会用到,因为这种场景下的返回值就不是视图了而是ModelAttribute的value值,如果不是视图,那么@RequestMapping注解的方法也失去了本身的含义。
