天天看點

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

傳回導讀目錄,閱讀更多随筆

分割線,以下為部落格簽名:

軟體臭蟲情未了

  • 編碼一分鐘
  • 測試十年功

随筆如有錯誤或不恰當之處、為希望不誤導他人,望大俠們給予批評指正。