總結:
外部容器通過***傳給spring mvc初始化,這個初始化我們是以分散重寫初始化邏輯進入spring ioc 初始化,然後在返回到spring mvc自己的上下文九大元件初始化
spring mvc 底層是設計原理是 前端控制模式
我們拿著總結和上面這張圖去看具體實現過程,不然在細節過程,我們很容易就迷糊了,拿到總結讓我們有一種一覽眾山小的視角去俯瞰細節.
1.--------spring mvc實現了servlert規範--------
這個是servlet的相關方法
為什麼說spring mvc是實現了servlet的方法呢?我們去看一下原始碼
我們知道dispatchservlet是spring mvc的核心控制器,由原始碼可以看出,它的父類就是 genericservlet,而genericservlet的父類也是servlert,所以說,spring mvc是實現了servlet的規範
2.------spring mvc初始化的過程--------
容器啟動的時候初始化,既然上面說了spring mvc實現了servlet規範,那麼它肯定也會有相應的 init , service , destroy.
不過區別是在 這三個方法是在不同的類實現的,並不是每個類都重寫了這三個方法,每個類都會有自己專注的事情來做.
來,我們看下面這幾張圖,有以下幾張圖我們可以分析出父類的genericservlet的init初始化方法,其實最後是第三張圖中httpservlert子類給重寫了
(1)genericservlet進行初始化(爺爺輩)
(2)httpservlet 做了service方法(兒子輩)
(3)進行了init初始化的方法重寫 (孫子輩)
3.------httpservletbean的初始化方法細節-------------
(1)init初始化方法
(2)真正的初始化方法 initservletbean方法
(3)構建spring mvc自己的上下文環境
//這個方法主要是構建spring mvc自己的上下文//拿到根上下文環境 spring ioc
//建立spring mvc自己的上下文,但是沒有例項化
//如果不為空說明已經通過構造方法設定了乙個上下文物件
//當前的spring mvc的上下文
//這裡判斷這個上下文有沒有被啟用過,bean關係有沒有更新一次
if(!attrname.isactive())
//沒有啟用就重新啟用一下 我們在看一下啟用的具體實現
} }
}if(wac == null)
if(wac == null)
if(!this.refresheventreceived)
if(this.publishcontext)
}return wac;
}
(4)啟用上下文的方法
//這裡是啟用上下文的方法(5)我們再來看初始化的最後一步protected void
if(objectutils.identitytostring(wac).equals(wac.getid())) else
}//設定上下文環境
wac.setservletcontext(this.getservletcontext());
//設定配置資訊
wac.setservletconfig(this.getservletconfig());
//設定命名空間
wac.setnamespace(this.getnamespace());
configurableenvironment env = wac.getenvironment();
if(env instanceof configurablewebenvironment)
//刷下上下文
wac.refresh();
}
至此spring mvc的初始化結束
SpringMVC 原始碼分析
springmvc之 springmvc的引數匹配原始碼分析 使用 modelattribute 進行引數注入 springmvc方法返回值詳解 原始碼流程 public class implements configuration componentscan com enableaspectjau...
SpringMVC原始碼分析 二
第九章 spring aop 原始碼解析 二 這一章來簡單的介紹一下springmvc的高階應用 過濾器 filter 對request請求起到過濾的作用,作用在servlet之前,如果配置為 可以對所有的資源訪問 servlet js css靜態資源等 進行過濾處理 interceptor 是sp...
Spring MVC 的原始碼分析 2
spring mvc 如何在servlet容器中處理業務的?我們依次檢視原始碼中三個方法的具體內容 1 requestmethod.patch都包含那些列舉型別呢?public enum requestmethod 2 processrequest方法是如何進行分流的呢?3 當所有的method方法...