Spring Boot中Spring MVC的源码解析
这篇博客主要讲解一下spring boot中spring mvc的流程及其源码部分解析。
spring mvc流程就暂时先不说,太多人有说了,相信大家应该也已经熟悉了,spring mvc流程参考:https://blog.****.net/zhaolijing2012/article/details/41596803
web上下文和DispatcherServlet初始化
spirng boot中的spring mvc与原本的spring mvc初始化不同,使用spring配置来引导自身和其嵌入Servlet容器,而不是像之前那样挂载到Serlet容器的生命周期。而是基于spring boot的自动配置启动,首先初始化Servlet上下文,通过ServletWebServerApplicationContext
实现spring mvc的上下文,它会自动通过查找在spring 上下文ApplicationContext
中的ServletWebServerFactory
来新建和初始化自己。
在该类的注释及spring boot的文档中有说明都可以看出来。
Spring MVC及Tomcat具体初始化流程:
-
调用
postProcessBeanFactory
方法在Bean初始化之前完成Servlet的一些默认配置。具体是先后调用onRefresh()
、createWebServer()
、getSelfInitializer()
等方法初始化Tomcat容器所需的默认bean和加载Config类中配置。另外,在createWebServer中得到ApplicationContext
中的ServletWebServerFactory
类,在得到该类过程中,通过@Bean
注解初始化DispatcherServlet
类。这样就将ServletWebServerApplicationContext该类初始化到spring容器中,并初始化tomcat的一些基本配置了。 -
接着是通过调用
selfInitialize
方法,在该方法中获取所有ServletContextInitializer
对象,并调用其onStartup
方法。这里的ServletContextInitializer
是Filter和Servlet等Web组件类的实现接口,调用onStartup
方法即是将它们添加到ServletContainer
中.
selfInitialize方法
ServletContextInitializer实现的类
URL映射流程
-
调用
RequestMappingHandlerMapping
中的方法,开始装载URL与Controller方法之间的对应关系。 -
启动tomcat