说说@ModelAttribute在父类和子类中的执行顺序
@ModelAttribute在父类、子类的执行顺序
被 @ModelAttribute 注解的方法会在Controller每个方法执行之前都执行,因此对于一个Controller中包含多个URL的时候,要谨慎使用。
执行顺序:
先执行子类 @ModelAttribute 注解的方法,再执行父类中 @ModelAttribute 注解的方法。
@ModelAttribute原理概述以及使用注意点
@ModelAttribute注解修饰的方法:
1.从数据库中取出对象,把对象放到Map中,键为user
2.SpringMvc从Map中取出User对象,并且把请求参数赋值给User对象的对应属性
3.SpringMvc把上述的对象传入目标方法的参数
注意:在@ModelAttribute修饰的方法中,放入到Map中的键名要和目标方法入参类型的第一个字母小写的字符串一致
源码分析流程:
调用@ModelAttribute注解修饰的方法,实际上@ModelAttribute方法中Map中的数据放在了implicitModel中.
解析请求处理器的目标参数,实际上该目标参数来自于WebDataBinder对象的target属性
1).创建WebDataBinder对象
确定objectName属性:如果传入的attrName属性值为"",则objectName为类名第一个字母小写
注意:attrName若目标方法的POJO属性使用了@ModelAttribute来修饰,则attrName的值为@ModelAttribute的value属性
确定target属性
在implitModel中查找attrName对应的属性值.若不存在,则验证当前handler是否使用了@sessionAttribute进行修饰,则尝试从session中获取attrName所对应的属性值,若session中没有,则抛出了异常。
若Handler没有使用@sessionAttribute进行修饰,或者@SessionAttrbutes中没有value值指定的key和attrName相,则通过反射创建POJO对象.
2).SpringMvc把表单的请求参数赋给了WebDataBinder的target对应的属性,
3).SpringMvc会把WebDataBinder的attrName和targe给到implicitMoel
4).把WebDataBinder的target作为参数传递给目标方法的入参
以上为个人经验,希望能给大家一个参考,也希望大家多多支持猪先飞。
相关文章
- 引发这个问题思考的是一段js程序的运行结果: 复制代码 代码如下: var i = 0; function a(){ for(i=0;i<20;i++){ } } function b(){ for(i=0;i<3;i++){ a(); } return i; } var Result = b(); 这段程序的运行结果是Re...2014-05-31
浅谈Docker-compose中的depends_on顺序的问题解决
本文主要介绍了浅谈Docker-compose中的depends_on顺序的问题解决,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-11-03vue.js页面加载执行created,mounted的先后顺序说明
这篇文章主要介绍了vue.js页面加载执行created,mounted的先后顺序说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-07- 本篇文章是对c++中参数对象与局部对象的析构顺序进行了详细的分析介绍,需要的朋友参考下...2020-04-25
- 这篇文章主要介绍了C++子类父类成员函数的覆盖和隐藏实例详解的相关资料,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了浅谈mysql执行过程以及顺序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-05-12
- 这篇文章主要介绍了django中url映射规则和服务端响应顺序的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-05-10
- 今天小编就为大家分享一篇对for循环中表达式和循环体的执行顺序详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-25
- 这篇文章主要介绍了简单了解springboot加载配置文件顺序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-11
- 这篇文章主要介绍了MySQL语句执行顺序和编写顺序实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-24
- 这篇文章主要介绍了springMVC web.xml中的配置加载顺序,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-30
- 有朋友问我,C#中C#语句先后顺序影响程序的结果吗?告诉大家,答案是肯定的,绝对影响程序的结果,所以在程序中一定要注意C#语句的顺序...2020-06-25
- 这篇文章主要介绍了子类继承父类时构造函数相关问题解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-10
- 当页面进行回发时,如点击按钮,以上事件都会重新执行一次,这时的执行顺序为OnPreInit、OnInit、OnInitComplete等等,感兴趣的朋友可以参考下哈...2021-09-22
- 这篇文章主要介绍了C#子类对基类方法的继承、重写与隐藏的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用C#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-11-03
- 这篇文章主要为大家介绍了jquery调整表格行tr上下顺序实例,具有一定的参考价值,感兴趣的朋友可以参考一下...2016-01-12
- 这篇文章主要给大家介绍了关于C#执行顺序带来的一些潜在问题,文中通过示例代码介绍的非常详细,对大家学习或者使用C#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-11-03
Oracle Faq(如何在ORACLE中更改表的列名和顺序 )
如需转载,请注明出处! 用过ORACLE的人都知道,要想在ORACLE中更改表的列名和顺序可是一件很烦琐的事,下面给大家提供一种简单的方法。 SQL> select object_id from all_obj...2016-11-25- 下面小编就为大家带来一篇C++聚合关系类的构造函数的调用顺序详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考,一起跟随小编过来看看吧...2020-04-25
- 这篇文章主要介绍了Java父类继承中的static和final用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-08