说说@ModelAttribute在父类和子类中的执行顺序

 更新时间:2021年06月17日 11:22:12   作者:格子间里格子衫  
这篇文章主要介绍了@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作为参数传递给目标方法的入参

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • struts2实现多文件上传的示例代码

    struts2实现多文件上传的示例代码

    本篇文章主要介绍了struts2实现多文件上传的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • Java中随机函数变换的示例详解

    Java中随机函数变换的示例详解

    这篇文章主要为大家详细介绍了Java中随机函数的变换,文中的示例代码讲解详细,对我们学习Java有一定的帮助,感兴趣的可以了解一下
    2022-08-08
  • Java kafka如何实现自定义分区类和拦截器

    Java kafka如何实现自定义分区类和拦截器

    这篇文章主要介绍了Java kafka如何实现自定义分区类和拦截器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • SpringBoot2.X整合Spring-Cache缓存开发的实现

    SpringBoot2.X整合Spring-Cache缓存开发的实现

    本文主要介绍了SpringBoot2.X整合Spring-Cache缓存开发的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • java获取文件大小的几种方法

    java获取文件大小的几种方法

    这篇文章主要介绍了java获取文件大小的几种方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • 记一次springboot中用undertow的坑

    记一次springboot中用undertow的坑

    这篇文章主要介绍了记一次springboot中用undertow的坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Java 全面掌握网络编程篇

    Java 全面掌握网络编程篇

    网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。java.net 包中 J2SE 的 API 包含有类和接口,它们提供低层次的通信细节。你可以直接使用这些类和接口,来专注于解决问题,而不用关注通信细节
    2021-10-10
  • Springboot实现动态定时任务管理的示例代码

    Springboot实现动态定时任务管理的示例代码

    最近在做spring boot项目开发中,由于使用@EnableScheduling注解和@Scheduled注解来实现的定时任务,只能静态的创建定时任务,不能动态修改、添加、删除、启/停任务,下面通过本文给大家介绍Springboot实现动态定时任务管理的方法,感兴趣的朋友跟随小编一起看看吧
    2023-07-07
  • Spring boot实现数据库读写分离的方法

    Spring boot实现数据库读写分离的方法

    本篇文章主要介绍了Spring boot实现数据库读写分离的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • java 爬虫详解及简单实例

    java 爬虫详解及简单实例

    这篇文章主要介绍了java 爬虫详解及简单实例的相关资料,需要的朋友可以参考下
    2017-05-05

最新评论