【Spring專場】「MVC容器」不看源碼就帶你認識核心流程以及運作原理

前提回顧

之前已經寫了很多問斬針對於SpringMVC的的執行原理和核心流程,在此再進行冗餘介紹就沒有任何意義了,所以我們主要考慮的就是針對於SpringMVC還沒但大框架有介紹的相關內容解析分析和說明,那麼接下來就讓我們來接入Spring框架在覈心的三大框架之一。

DispatcherServlet的族譜

核心類的繼承關係

核心的主要角色

XXAware的接通

主要用於BeanPostProcessor進行相關的獲取系統內部的相關的XX組件功能的實現機制,通過實現該實現類的接口後,就可以非常方便向spring框架索取一些框架信息。

EnvironmentCapable

可以通過該類接口實現機制,進行獲取相關的環境變量對象。

HtpServeltBean

是HttpServlet抽象的簡單實現接口,以及對於相關的功能的進行一步執行擴展

FrameworkServlet執行類

主要是Spring web框架的一個基礎父類,他會在dispatcherServlet創建之前創建一個父容器和自容器之間的關係。

DispatcherServlet實現類

主要是Spring web框架的,也是之前我們文章介紹的核心機制執行流程,它主要用於協調SpringMVC的整體運作流程和執行流程,初始化各個組件機制,比如:HandlerMapping組件、HandlerAdapter組件和HandlerExecuteChain。

借用一個網圖(懶得自己在進行畫了)

容器的創建過程

主要在Spring框架和MVC框架領域裏面主要分爲兩種類型的容器:我們將他們定義爲:業務容器和web容器。
容器會先進性建立業務容器(也可以說是父容器機制),再進行建立web容器(子容器),在初始化web容器的時候,會將父容器綁定到子容器中,作爲其父容器。

父容器的初始化入口

主要依靠我們系統內部的ContextLoaderListener的contextInitialized方法,當ServletContext類被加載後,監聽的contextInitailized方法就會被servlet容器進行調用。

父容器的創建流程

contextIntialized方法被調用之後,會進行創建createWebApplicationContext方法,調用內部的determineContextClass方法,進行判斷初始化容器的類型,默認爲XmlWebApplicationContext對象類。主要採用instantiateClass方法進行反射生成對應的容器對象。

此外對於SprringBoot以及其他類型的容器而言更多可能會選擇ConfigureAndRefreshWebApplicationContext或者AnnotationConfigApplicationContext類,前者更多會進行刷新容器實現和使用,後者主要以JavaConfig的方式進行構建spring容器組件。

最後將生產的父子容器對象設置和注入到相關的ServletContext容器的全局上下文區。

子容器的初始化入口

HttpServletBean核心類覆蓋了httpServlet類的init的方法,這個就是創建web容器的入口。

  1. HttpServletBean的init方法的調用
  2. 會調用相關的nitFrameworkServlet方法
  3. 會調用FrameworkServlet內的initServletBean方法。

子容器的初始化流程

  1. servletContext的容器獲取ContextServletListener中的創建的容器對象
  2. 如果this.WebApplicationContext 不是空,進設置配置相關的父容器和刷新容器。
  3. 創建完對應的web容器之後,將上面的容器作爲該容器的父容器,將rootContext作爲父容器,並且同樣進行設置綁定到對應的ServletContext容器中。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章