在springwebmvc中對rest提供了很好的支援,下面就一步一步的debug來看看springwebmvc原始碼。
下面是乙個執行流程圖,接下來對這張圖進行驗證
編寫啟動類和controller
package com.wrial.art6_rest.bootstrap;
/* * @author wrial
* @date created in 22:11 2019/7/22
* @description 啟動類
進入gethandleradapter方法中,可以看到它還是根據for迴圈進行匹配,可以看見下面有三個adapter
通過support方法來判斷是否支援當前的handlemethod
下面是support原始碼,它根據handler和handlermethod進行比較是不是同乙個物件,supportsinternal永遠返回true
然後發現support成立,就將此返回,然後一直單步執行,發現到了handleinternal方法,就給checkrequest打個斷點
,發現請求的資訊基本在這個斷點處就差不多清晰明了了
它會對這個呼叫進行檢查,檢查完畢就返回到我們的方法進行下一步操作,也就是根據方法的內容進行渲染(因為我這裡沒有加引數因此就直接返回了,如果有引數的話需要進行引數解析,最後才能返回)
可以看到,下一步就是視**析的過程了(看到這裡我發現乙個問題,我的art5專案裡面才配置了internalresourceviewresolver優先,發現是專案除錯錯了,但是還好的是art5專案中也有hello這個對映,其實結果都是一樣的,只是最後視**析的策略順序不同而已)
根據優先順序來進行檢視匹配,和前面的對映方式是一樣的,然後根據視**析器進行解析和渲染,它會在視**析的使用會根據@responsebody
註解來判斷是不是需要返回乙個檢視頁,如果需要返回檢視頁的話就解析並定位到指定檢視,並渲染,如果不是的話,會根據序列化器將這些內容根據序列化規則序列化並進行輸出。
雖然這個例子裡面沒有引數,但是過程都是一樣的
springboot原始碼略讀
springboot的精髓是自動依賴注入。那麼哪些能自動注入呢,開啟spring boot autoconfigure,jar下的spring.factories。可以看到一堆這樣的配置 auto configure org.springframework.boot.autoconfigure.en...
SpringBoot原始碼分析
public class 第乙個引數 resourceloader 資源載入器 第二個引數 primarysources 載入的主要資源類 suppresswarnings public resourceloader resourceloader,class primarysources deduc...
Spring Boot 原始碼分析
1 專案初始化過程 springboot啟動類 springboot的啟動很簡單,如下 public static void main string args this.resourceloader resourceloader initialize sources private void ini...