温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

@ModelAttribute在父类和子类中的执行顺序是什么

发布时间:2021-06-17 14:44:03 来源:亿速云 阅读:373 作者:chen 栏目:开发技术

这篇文章主要讲解了“@ModelAttribute在父类和子类中的执行顺序是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“@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作为参数传递给目标方法的入参

感谢各位的阅读,以上就是“@ModelAttribute在父类和子类中的执行顺序是什么”的内容了,经过本文的学习后,相信大家对@ModelAttribute在父类和子类中的执行顺序是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI