【聊透SpringMVC】SpringMVC“現代”方式的啟動過程

“哪有什麼歲月靜好,不過是有人替你負重前行”,這句話一點不假。該做的事情還是要做的,你不用做,那是別人替你做了而已。


當SpringMVC遇上SpringBoot後,確實方便了開發人員,那是因為SpringBoot把所有的代碼都寫好了,並通過自動配置來應用這些代碼。
現代的啟動過程
因為是基於SpringBoot的,所以就要按照SpringBoot的Style了,一切都要從入口類SpringApplication說起。
首先創建容器,如下圖01:

【聊透SpringMVC】SpringMVC“現代”方式的啟動過程


這個容器類的名稱是:
AnnotationConfigServletWebServerApplicationContext


它是SpringBoot為自己專門“量身打造”的,與之前相比這個容器類最大的不同就是,它要去創建和啟動Tomcat。
容器刷新時創建並啟動Tomcat,如下圖02:

【聊透SpringMVC】SpringMVC“現代”方式的啟動過程


在啟動的過程中,要把ServletContext對象從Tomcat裡帶出來,因為它是由Tomcat創建出來的。
在創建Tomcat時,實際是把Spring容器實例自己本身傳進去了,然後通過一個方法參數帶了出來。如下圖03:

【聊透SpringMVC】SpringMVC“現代”方式的啟動過程


然後再把Spring容器放入ServletContext中,如下圖04:


【聊透SpringMVC】SpringMVC“現代”方式的啟動過程


同時ServletContext被保存到Spring容器實例的一個字段中,方便後續使用。
然後把核心Servlet註冊為Bean,如下圖05:

【聊透SpringMVC】SpringMVC“現代”方式的啟動過程


接著把核心Servlet註冊到ServletContext中,就等於註冊到了Tomcat中,如下圖06:

【聊透SpringMVC】SpringMVC“現代”方式的啟動過程


然後再看下具體的註冊過程,把核心Servlet添加到ServletContext中,如下圖07:

【聊透SpringMVC】SpringMVC“現代”方式的啟動過程


配置一下URL映射和文件上傳等,如下圖08:

【聊透SpringMVC】SpringMVC“現代”方式的啟動過程


核心控制器映射的URL還是“/”,如下圖09:

【聊透SpringMVC】SpringMVC“現代”方式的啟動過程



現代方式 VS 傳統方式
相同點:
都需要創建Spring容器


都需要把該容器放入ServletContext中
都需要把核心Servlet註冊到ServletContext中。
不同點:
傳統方式可以創建兩個Spring容器,現代方式只有一個容器。
傳統方式是Tomcat先啟動,然後帶動Spring容器的創建,現代方式是容器先創建,在刷新時再帶動Tomcat的啟動。
重要點:
雖然啟動Tomcat的時機和方式不同,但是把ServletContext從Tomcat裡取出來的方式是一樣的,都要用到上一篇提到的“小橋式”接口。
它是用來觸發一些初始化工作,主要就是註冊核心Servlet到ServletContext裡,如下圖10:

【聊透SpringMVC】SpringMVC“現代”方式的啟動過程


給開發人員剩下些什麼呢?
在一般不復雜的情況下,就是剩一個application.yml配置文件了。開發人員在裡面配置就可以了。
這些配置項肯定都是提前預設好的,在啟動時會去讀取這些配置值,並應用在初始化中,如下圖11:

【聊透SpringMVC】SpringMVC“現代”方式的啟動過程


當然了,可配置的項很多,IDE都帶智能提示,很方便。


作者心聲:框架越來越完善和智能,留給普通開發人員的工作幾乎只剩CRUD了,努力吧,不然就真的只會這些了。


原文鏈接:https://mp.weixin.qq.com/s/QaV57dfnWmKuJmruUBDpjg


分享到:


相關文章: