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:支持級聯屬性)。至此,處理完畢。

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM