SpringMVC源码—父子容器启动原理
2021-10-22 09:58:59 2 举报
SpringMVC源码—父子容器启动原理
作者其他创作
大纲/内容
注解EnableWebMvc
提供创建父容器模板
创建子容器
注册DispatcherServlet
查找所有@HandlesTypes
将DispatcherServlet添加到servletContext
提供创建子容器模板
/META-INF/service/javax.servlet.ServletContainerInitializer
getRootConfigClassesgetServletConfigClasses
@HandlesTypes(WebApplicationContext.class)
刷新容器
configureAndRefreshWebApplicationContext.refresh
WebApplicationInitializer
initWebApplicationContext
SpringServletContainerInitializer.onStartup
tomcat加载,DispatchServlet生命周期,初始化
前端控制器DispatcherServlet的拦截路径
定义容器配置模板
设置父容器
createRootApplicationContext
registerDispatcherServlet
ContextLoaderListener
注册一个监听,在spring finishRefresh会调用
ContextRefreshedEvent.onApplicationEvent
servletContext.addServlet
ContextLoader.initWebApplicationContext
TomcatHttpServer.startInternal
createServletApplicationContext
StandardContext.startInternal
//初始化我们web上下文对象的 用于文件上传下载的解析器对象 initMultipartResolver(context); //初始化我们web上下文对象用于处理国际化资源的 initLocaleResolver(context); //主题解析器对象初始化 initThemeResolver(context); //初始化我们的HandlerMapping initHandlerMappings(context); //实例化我们的HandlerAdapters initHandlerAdapters(context); //实例化我们处理器异常解析器对象 initHandlerExceptionResolvers(context); initRequestToViewNameTranslator(context); //给DispatcherSerlvet的ViewResolvers处理器 initViewResolvers(context); initFlashMapManager(context);
processServletContainerInitializers
SPI ServiceLoader.load
循环调用
tomcat监听 --listenerStart
getRootConfigClasses
将ContextLoader添加到servletContext
spring中实现了WebApplicationInitializer
tomcat启动
AbstractAnnotationConfigDispatcherServletInitializer
DelegatingWebMvcConfiguration
WebApplicationInitializer.onStartup
onStartup
容器的启动类
webConfig
getServletConfigClasses
getServletMappings
servletContext.addListener
registerContextLoaderListener
IOC子容器配置 web容器配置
servletContext
initStrategies
加载
创建spring容器
ContextConfig.LifecycleListener
提供启动接口
createWebApplicationContext创建父容器
注册ContextLoaderListener
Yes
getWebApplicationContext
configureStart()
DeepinStarterInitializer
AbstractDispatcherServletInitializer
注入spring容器中
DispatcherServlet.onRefresh
ServletContainerInitializer
context=null
放入
0 条评论
下一页