您好,登錄后才能下訂單哦!
這篇文章主要講解了“@ModelAttribute在父類和子類中的執行順序是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“@ModelAttribute在父類和子類中的執行順序是什么”吧!
被 @ModelAttribute 注解的方法會在Controller每個方法執行之前都執行,因此對于一個Controller中包含多個URL的時候,要謹慎使用。
先執行子類 @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作為參數傳遞給目標方法的入參
感謝各位的閱讀,以上就是“@ModelAttribute在父類和子類中的執行順序是什么”的內容了,經過本文的學習后,相信大家對@ModelAttribute在父類和子類中的執行順序是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。