ModelAttribute 執行流程

2021-08-20 20:52:06 字數 2243 閱讀 8948

近期公司有個小培訓,本人找了這麼乙個小課題,用以培訓交流時講,在查詢資料時借用的佟哥的部分思路。

先說好,以下涉及源**,看的時候請配合springnvc的原始碼

@modelattribute 執行流程:

* 1. 執行 @modelattribute 註解修飾的方法: 從資料庫中取出物件, 把物件放入到了 map 中. 鍵為: user

* 2. springmvc 從 map 中取出 user 物件, 並把表單的請求引數賦給該 user 物件的對應屬性.

* 3. springmvc 把上述物件傳入目標方法的引數.

* * 注意: 在 @modelattribute 修飾的方法中, 放入到 map 時的鍵需要和目標方法入參型別的第乙個字母小寫的字串一致!

* * springmvc 確定目標方法 pojo 型別入參的過程

* 1. 確定乙個 key:

* 1). 若目標方法的 pojo 型別的引數木有使用 @modelattribute 作為修飾, 則 key 為 pojo 類名第乙個字母的小寫

* 2). 若使用了 @modelattribute 來修飾, 則 key 為 @modelattribute 註解的 value 屬性值.

* 2. 在 implicitmodel 中查詢 key 對應的物件, 若存在, 則作為入參傳入

* 1). 若在 @modelattribute 標記的方法中在 map 中儲存過, 且 key 和 1 確定的 key 一致, 則會獲取到.

* 3. 若 implicitmodel 中不存在 key 對應的物件, 則檢查當前的 handler 是否使用 @sessionattributes 註解修飾,

* 若使用了該註解, 且 @sessionattributes 註解的 value 屬性值中包含了 key, 則會從 httpsession 中來獲取 key 所

* 對應的 value 值, 若存在則直接傳入到目標方法的入參中. 若不存在則將丟擲異常.

* 4. 若 handler 沒有標識 @sessionattributes 註解或 @sessionattributes 註解的 value 值中不包含 key, 則

* 會通過反射來建立 pojo 型別的引數, 傳入為目標方法的引數

* 5. springmvc 會把 key 和 pojo 型別的物件儲存到 implicitmodel 中, 進而會儲存到 request 中.

* * 源**分析的流程

* 1. 呼叫 @modelattribute 註解修飾的方法. 實際上把 @modelattribute 方法中 map 中的資料放在了 implicitmodel 中.

* 2. 解析請求處理器的目標引數, 實際上該目標引數來自於 webdatabinder 物件的 target 屬性

* 1). 建立 webdatabinder 物件:

* ①. 確定 objectname 屬性: 若傳入的 attrname 屬性值為 "", 則 objectname 為類名第乙個字母小寫.

* *注意: attrname. 若目標方法的 pojo 屬性使用了 @modelattribute 來修飾, 則 attrname 值即為 @modelattribute

* 的 value 屬性值

* * ②. 確定 target 屬性:

* > 在 implicitmodel 中查詢 attrname 對應的屬性值. 若存在, ok

* > *若不存在: 則驗證當前 handler 是否使用了 @sessionattributes 進行修飾, 若使用了, 則嘗試從 session 中

* 獲取 attrname 所對應的屬性值. 若 session 中沒有對應的屬性值, 則丟擲了異常.

* > 若 handler 沒有使用 @sessionattributes 進行修飾, 或 @sessionattributes 中沒有使用 value 值指定的 key

* 和 attrname 相匹配, 則通過反射建立了 pojo 物件

* * 2). springmvc 把表單的請求引數賦給了 webdatabinder 的 target 對應的屬性.

* 3). *springmvc 會把 webdatabinder 的 attrname 和 target 給到 implicitmodel.

* 近而傳到 request 域物件中.

* 4). 把 webdatabinder 的 target 作為引數傳遞給目標方法的入參.

由於原始碼大家都有,並且時間原因ppt以及執行流程就不方便貼了,看官們將就一下。。

ModelAttribute用法總結

modelattribute主要的作用是將資料新增到模型物件中,用於檢視頁面顯示。modelattribute注釋的位置不同,和其他註解一起使用時有很多種用法。modelattribute註解在方法上。modelattribute註解的方法會在controller每個方法執行前被呼叫。這個有點類似於...

ModelAttribute註解簡單使用

當執行修改操作時,我們會遇到一些欄位不希望在前台展示,這樣也可以達到指定字段不可修改的目的 這裡只是講一下個人測試使用,權當自己筆記,可能會有很多錯誤,僅供參考,至於詳細講解這裡不再描述 1.使用modelattribute 2.前端頁面處理 3.手動合併處理 1.使用modelattribute註...

ModelAttribute的使用方法

modelattribute 跳轉到儲存使用者介面 param user return public string adduser modelattribute user user user 注意 此處使用 modelattribute 註解,即將方法入參物件 user 新增到模型中,然後再根據ht...