1. 程式人生 > 實用技巧 >百度排名代發_知乎豆瓣排名接單代發

百度排名代發_知乎豆瓣排名接單代發

百度排名代發_知乎豆瓣排名接單代發▄▄【代發排名+Q:5930615】專業百度排名,出售各種收錄軟體,玳發代做排名,任何平臺可發,留痕代做,行業不限,非誠勿擾!

如上面的所示,我們可以很清楚觀察ResponseBodyAdvice呼叫關係。這裡的類呼叫關係相對還是比較複雜,下面給大家簡化一下。

前面的邏輯就不說了,就是 Spring MVC 通用流程。重點邏輯位於RequestResponseBodyAdviceChain,我們具體看下原始碼:

嗯吶嗯吶,請忽略上圖的 ③

其實邏輯非常簡單,遍歷所有的ResponseBodyAdvice的子類,首先呼叫其supports判斷是否支援,如果支援的呼叫的beforeBodyWrite

修改返回資訊。

FilterInterceptorResponseBodyAdvice區別

Filter屬於 Servlet 元件,所有請求將會先進入Filter,判斷通過之後才會在進入到真正的具體的請求中。

上圖代表是用 Spring MVC 的一個 Web 專案,所有請求將會先進入到Filter,通過之後才會進入到 SpringMVC 中最重要的元件DispatchServlet

Interceptor是 SpringMVC 的元件,它的作用實際上與Filter類似, 只不過的它的作用是位於自定義的Controller前後。

不管是Filter還是Interceptor,它們的作用方法域內只能拿到ServletResponse

的引數,這個時候返回值已經被寫入ServletResponse,我們很難再去修改。

ResponseBodyAdvice作用時機位於寫入之前,所以這個時候可以很容易拿到原值進行修改。

總結

SpringMVC 初始化的過程中,將會掃描所有帶有@ControllerAdvice註解的類,將其生成為ControllerAdviceBean。如果這類剛好為ResponseBodyAdvice介面的子類,Spring 將會為其單獨儲存起來,後續將會封裝到的RequestResponseBodyAdviceChain,使用責任鏈的模式對請求、響應進行處理。

最後我們解釋了一下FilterInterceptor

ResponseBodyAdvice區別,從作用範圍上來講:

Filter>Interceptor>ResponseBodyAdvice

但是前兩者沒辦法修改返回值(時機太晚),只有後者才可以真正在返回值返回之前做到修改。