百度排名代發_知乎豆瓣排名接單代發
百度排名代發_知乎豆瓣排名接單代發▄▄【代發排名+Q:5930615】專業百度排名,出售各種收錄軟體,玳發代做排名,任何平臺可發,留痕代做,行業不限,非誠勿擾!
如上面的所示,我們可以很清楚觀察ResponseBodyAdvice
呼叫關係。這裡的類呼叫關係相對還是比較複雜,下面給大家簡化一下。
前面的邏輯就不說了,就是 Spring MVC 通用流程。重點邏輯位於RequestResponseBodyAdviceChain
,我們具體看下原始碼:
嗯吶嗯吶,請忽略上圖的 ③
其實邏輯非常簡單,遍歷所有的ResponseBodyAdvice
的子類,首先呼叫其supports
判斷是否支援,如果支援的呼叫的beforeBodyWrite
Filter
、Interceptor
、ResponseBodyAdvice
區別
Filter
屬於 Servlet 元件,所有請求將會先進入Filter
,判斷通過之後才會在進入到真正的具體的請求中。
上圖代表是用 Spring MVC 的一個 Web 專案,所有請求將會先進入到Filter
,通過之後才會進入到 SpringMVC 中最重要的元件DispatchServlet
。
而Interceptor
是 SpringMVC 的元件,它的作用實際上與Filter
類似, 只不過的它的作用是位於自定義的Controller
前後。
不管是Filter
還是Interceptor
,它們的作用方法域內只能拿到ServletResponse
ServletResponse
,我們很難再去修改。
而ResponseBodyAdvice
作用時機位於寫入之前,所以這個時候可以很容易拿到原值進行修改。
總結
SpringMVC 初始化的過程中,將會掃描所有帶有@ControllerAdvice
註解的類,將其生成為ControllerAdviceBean
。如果這類剛好為ResponseBodyAdvice
介面的子類,Spring 將會為其單獨儲存起來,後續將會封裝到的RequestResponseBodyAdviceChain
,使用責任鏈的模式對請求、響應進行處理。
最後我們解釋了一下Filter
,Interceptor
ResponseBodyAdvice
區別,從作用範圍上來講:
Filter>Interceptor>ResponseBodyAdvice
但是前兩者沒辦法修改返回值(時機太晚),只有後者才可以真正在返回值返回之前做到修改。