说说@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作为参数传递给目标方法的入参

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

相关文章

  • Java8时间接口LocalDateTime详细用法

    Java8时间接口LocalDateTime详细用法

    最近看别人项目源码,发现Java8新的日期时间API很方便强大,所以整理了这篇文章,文中有非常详细的代码示例,对正在学习java的小伙伴们有很好的帮助,需要的朋友可以参考下
    2021-05-05
  • Java本地方法(JNA)详解及常见问题

    Java本地方法(JNA)详解及常见问题

    JNA(Java Native Access)是一个开源Java框架,用于无需编写JNI代码即可动态访问本地系统库如Windows的dll,它允许Java程序直接调用本地方法,这篇文章主要介绍了Java本地方法(JNA)详解及常见问题,需要的朋友可以参考下
    2024-09-09
  • 一文带你深入了解Java的数据结构

    一文带你深入了解Java的数据结构

    Java工具包提供了强大的数据结构。这篇文章主要为大家详细介绍了Java数据结构中常用的几种接口和类,感兴趣的小伙伴可以跟随小编一起了解一下
    2023-05-05
  • Java中如何调用cmd压缩文件

    Java中如何调用cmd压缩文件

    以下是对Java调用cmd压缩文件的实现方法进行了分析介绍,需要的朋友可以参考下
    2013-07-07
  • Spring Boot Security配置教程

    Spring Boot Security配置教程

    在本文里我们给大家分享了关于Spring Boot Security配置的相关步骤以及注意要点,需要的朋友们跟着操作下。
    2019-05-05
  • java 获取字节码文件的几种方法总结

    java 获取字节码文件的几种方法总结

    这篇文章主要介绍了java 获取字节码文件的几种方法总结的相关资料,这里总结了三种方法帮助大家实现该功能,需要的朋友可以参考下
    2017-08-08
  • Java利用iTextPDF库实现制作PDF表格模板并填充数据

    Java利用iTextPDF库实现制作PDF表格模板并填充数据

    这篇文章主要为大家详细介绍了如何通过Java的iTextPDF库制作一个PDF表格模板并填充数据,文中的示例代码讲解详细,感兴趣的小伙伴快跟随小编一起学习一下吧
    2023-12-12
  • vue 实现删除对象的元素 delete

    vue 实现删除对象的元素 delete

    这篇文章主要介绍了vue 实现删除对象的元素delete,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Java实现控制台输出两点间距离

    Java实现控制台输出两点间距离

    这篇文章主要介绍了Java实现控制台输出两点间距离,涉及了部分编程坐标的问题,具有一定参考价值,需要的朋友可以了解下
    2017-09-09
  • springboot2.1.7整合thymeleaf代码实例

    springboot2.1.7整合thymeleaf代码实例

    这篇文章主要介绍了springboot2.1.7整合thymeleaf代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12

最新评论