問題:
簡述springmvc和springboot的啟動過程
答案:
- springmvc的啟動過程:
首先,任何一個常規web應用,都會在web容器中啟動,web容器提供其一個全局的上下文環境即ServletContext。在web.xml中會提供有ContextLoaderListener,這就是父容器,負責加載service層及dao層,可以取默認路徑的配置,也可以由context-param去指定配置路徑。在web容器啟動時,會觸發容器初始化事件,此時contextLoaderListener會監聽到這個事件,其contextInitialized方法會被調用,在這個方法中,spring會初始化一個啟動上下文,被稱為根上下文,即 WebApplicationContext;然后,contextLoaderListener監聽器初始化完畢后,開始初始化web.xml中配置的Servlet,這個servlet可以配置多個,以最常見的DispatcherServlet為例,這個servlet實際上是一個標準的前端控制器,也被稱為子容器,用以轉發、匹配、處理每個servlet請求。DispatcherServlet上下文在初始化的時候會建立自己的IoC上下文,用以持有spring mvc相關的bean,負責加載controller層。綜上,父容器先啟動,子容器后啟動;子容器能訪問父容器,父容器不能訪問子容器。 - springboot的啟動過程:
springboot啟動流程主要分三個部分:(1)SpringApplication的初始化模塊配置一些基本的環境變量、資源、構造器、監聽器;(2)應用具體的啟動方案包括啟動流程的監聽模塊、加載配置環境模塊、及核心的創建上下文模塊;(3)自動化配置模塊完成自動配置,具體啟動過程如下:
1、新建module,在主程序類加入斷點,啟動springboot
2、首先進入SpringAplication類run方法
3、run方法新建SpringApplication對象
4、SpringApplication對象的run方法,首先創建并啟動計時監控類
5、接著通過configureHeadlessProperty設置java.awt.headless的值
6、接著調用getRunListeners創建所有spring監聽器
7、接著DefaultApplicationArguments初始化應用應用參數
8、接著prepareEnvironment根據運行監聽器和參數準備spring環境
9、接著調用createApplicationContext方法創建應用上下文
10、通過prepareContext準備應用上下文
11、refreshContext方法刷新上下文
12、調用stop方法停止計時監控器類
13、調用started發布應用上下文啟動完成事件
14、callRunners方法執行所有runner運行器
15、調用running發布應用上下文就緒事件
16、最后返回應用上下文