1. 程式人生 > >spring mvc引數解析 (三)HandlerMethodArgumentResolver

spring mvc引數解析 (三)HandlerMethodArgumentResolver

前面分析到WebDataBinderFactory 建立,實際是建立一個ServletRequestDataBinderFactory例項。 解析引數的方法是在父類實現了ModelAttributeMethodProcessor 在這裡插入圖片描述 從圖中可以看出類的繼承關係。 實際的解析方法是在這裡插入圖片描述 ModelFactory.getNameForParameter(parameter);先用靜態方法獲取當前引數的名稱 點進去可以發現在這裡插入圖片描述 如果當前引數有被@ModelAttribute 標記並且有value則使用value的值。如果不是 在這裡插入圖片描述 則最終的邏輯在這個方法裡面,首先判斷是不是陣列,在判斷是不是集合,最後去當前類的shortClassName 例如com.example.User 則最終為user. 以上只是獲取當前引數的name。 接著判斷mvcontain是否含有以之前獲得name為key的value,如果有則直接使用該value,如果沒有則建立一個value 在這裡插入圖片描述

在這裡插入圖片描述 具體看建立webdatabinder過程 從這裡看出只有在這裡插入圖片描述 DefaultDataBinderFactory有實現這個方法 這裡主要有三步 在這裡插入圖片描述 第一步 直接建立dababinder, 第二步用initializer初始化,這個後續講 這裡主要看第三步 在這裡插入圖片描述 這裡的第三步主要是通過反射執行之前的@InitBinder方法包括@ControllerAdvice和當前controller。 到此就將webdatabinder建立完成。