小編帶著小白看springboot源碼4
1.梳理一下springmvc的大概流程
首先是客戶端(瀏覽器)發送請求到前端控制器(dispatcherServlet)-------------->前端控制器就會去調用處理器映射器(HandlerMapping),去尋找真正的Handler(其實就是controller),返回執行器鏈(HandlerExecutionChain,本質上就是目標Handler和一些攔截器組成的)給前端控制器----------->前端控制器就去調用處理器適配器(HandlerAdapter)去執行這個Handler,返回模型數據和視圖(ModelAndView)給前端控制器------------->前端控制器從ModelAndView中獲取邏輯視圖(可以理解為controller返回的字符串),前端控制器調用視圖解析器(ViewResolver)找到真正的視圖(可以理解為就是加了一個前後綴,例如上節將的去類路徑下找 “/template/xxx.html”)-------------->將真正的視圖返回到前端控制器------------>模板引擎去渲染解析真正的視圖響應客戶端(ssm中就是去把裏面寫的jsp標簽內容以及html標簽內容,都變成servlet,編譯成字節碼文件,運行,然後響應客戶端)
2.springboot的流程
其實吧,springboot暫時可以理解為ssm中的springmvc+spring,雖然說這個理解不準確,但是有助於理解,不然腦中就只有一個印象:springboot很牛逼,做web應用特快,不需要配置,還是一個框架。。emmmm.....
所以,以前springmvc配置的東西,springboot裏面也有,前端控制器,映射器,適配器,視圖解析器等在springboot中也有,就看你會不會找。(不用想,肯定在那xxxAutoConfiguration中!不然加載那麽多自動配置類吃多了啊....)
好,第一步,我們先來找找前端控制器,在那些自動配置類中,有個叫做DispatcherServletAutoConfiguration,打開這個類(ctrl+鼠標左鍵,嘿嘿)
打開DispatcherServlet這個類的doDispatcher方法
到這裏,就完成一部分了,再之後,ModelAndView返回到前端控制器,我們再來看看視圖解析器
打開這個配置類,並找到視圖解析器的組件
接下來,我們就看看上圖中 ContentNegotiatingViewResolver resolver = new ContentNegotiatingViewResolver();這裏是如何設置視圖解析器的。打開這個類並找方法initServletContext(獲取容器中的所有視圖解析器,這點很是關鍵,那是不是我寫一個視圖解析器放進容器,在這裏是不是也會取到呢?答案當然是可以取到,這也是後面我們自己定制一個視圖解析器的方法,而且,從這裏可以看到,我們要自己定制一個組件,只需要實現相應組件的接口,然後丟到容器裏就可以了,是不是很簡單!)
viewResolver這個集合肯定很有用,果然,後面馬上就用到了
到這裏,大概的過程就走了一遍了,後面的就是模板引擎去渲染頁面響應了,沒什麽說的,具體的還是要自己走走源碼就差不多了(估計不會去走源碼,咳咳)。不會走源碼的可點擊鏈接學習:https://ke.qq.com/course/260263?flowToken=100687
其實說了這麽多,大家也發現了,暫時springboot重點就是那些xxxAutoConfiguration,有了這些自動配置類,才能讓我們去關註邏輯,而不是那些機械化的配置。
下一節就說說我們往這些組件添加更多功能,因為由於一些特殊原因,springboot自動配置的功能不能滿足我們的要求。或者幹脆了說,我們想要把springboot某個組件替換掉,用我們自己寫的組件,多好。
小編帶著小白看springboot源碼4