初學 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:支援級聯屬性)。至此,處理完畢。
傳回導讀目錄,閱讀更多随筆
分割線,以下為部落格簽名:
軟體臭蟲情未了
- 編碼一分鐘
- 測試十年功
随筆如有錯誤或不恰當之處、為希望不誤導他人,望大俠們給予批評指正。