• Spring MVC 对于@ModelAttribute 、@SessionAttributes 的详细处理流程


    初学 Spring MVC , 感觉对于 @ModelAttribute 和 @SessionAttributes 是如何被Spring MVC处理的,这一流程不是很清楚,

    经过Google资料,有了一个较为详细的了解,在此总结一下。

    1)Spring MVC 在调用处理方法之前,在请求线程中自动的创建一个隐含的模型对象。

    2)调用所有方法级的 标注了 @ModelAttribute 的方法,并将方法返回值添加到隐含的模型对象中。

    3)如果方法所在的控制器 (标记 @Controller的类)没有标记 @SessionAttributes("sessionXXX") 注释,则该处理步骤可跳过。

    查看Session 中是否存在 sessionXXX 属性,如果有,将其添加到隐含的模型对象中。如果隐含的模型对象中已经存在了sessionXXX属性,则其值将会被覆盖

    以下的步骤是针对 标记@ModelAttribute("xxx") 方法入参 的

    4)如果隐含的模型对象已经存在xxx属性,则将其赋值给入参,并将用户的请求消息 赋值给入参的相应属性 (PS:支持级联属性),并返回,以下的处理步骤不再进行。

    5)如果 方法所在的控制器、标记了 @SessionAttributes("xxx") 注释,则继续进行该处理步骤,否则直接进入步骤6。

    查找 Session,如果没有找到 xxx 属性,则抛出异常 HttpSessionRequiredException 。

    如果找到则将其赋值给入参,并将用户的请求消息 赋值给入参的相应属性 (PS:支持级联属性),并返回,以下的处理步骤不再进行。

    6)创建入参实例,并将其赋值给入参,并将用户的请求消息 赋值给入参的相应属性 (PS:支持级联属性)。至此,处理完毕。

  • 相关阅读:
    第1条:考虑用静态工厂方法代替构造器
    代理模式(Proxy Pattern)
    out 和 ref 参数修饰符
    SQL Server 性能调优(一)——从等待状态判断系统资源瓶颈【转】
    Windows下获取Dump文件以及进程下各线程调用栈的方法总结(转)
    sql server内置函数
    ORA-16019 和 ORA-16018 错误的处理方法(转)
    marge into操作
    LogMiner配置使用手册
    课后作业
  • 原文地址:https://www.cnblogs.com/08shiyan/p/3423384.html
Copyright © 2020-2023  润新知