Spring MVC 启动源码分析
2022-05-30 16:48:19 0 举报
Spring MVC 启动源码分析
作者其他创作
大纲/内容
initWebApplicationContext(ServletContext servletContext)
执行Spring启动过程
判断当前是否存在根容器,不存在需要去创建根容器
初始化一些个beanPostProceeors
mapping请求对应的适配器
ConfigurableWebApplicationContext# refresh()
1
创建子容器,且将根容器赋值给根容器
3
onRefresh(ApplicationContext context)
访问
将根容器赋值到servlet容器中
tomcat
Spring MVC 请求流程
2
initLocaleResolver(context)
createDispatcherServlet(servletAppContext)
mapping请求解析器
为子容器初始化参数,并且调用refersh刷新子容器
createServletApplicationContext()
4
initThemeResolver(context)
创建子容器
视图解析器
initStrategies(ApplicationContext context)
order ---> webAppInitializerClasses包含AbstractContextLoaderInitializer、AbstractDispatcherServletInitializer、AbstractAnnotationConfigDispatcherServletInitializer
为根容器,初始化参数,并且refrsh刷新容器
调用
rootContext =WebApplicationContextUtils.getWebApplicationContext(getServletContext())
为Spring MVC启动做准备,初始化一些资源
创建dispatchServlet对象,参数为子容器
设置到servletContext中
servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE) != null
从servlet容器中获取到根容器
初始化ContextLoader
FarmeworkServlet # initWebApplicationContext()
servletContext: 整个启动过程中都是通过这个容器去操作。webAppInitializerClasses:初始化web容器(父容器、子容器)
configureAndRefreshWebApplicationContext(cwac)
文件上传解析器
刷新容器
AbstractDispatcherServletInitializer
调用模板方法创建根容器(自己定义的)createRootApplicationContext()
将dispatchServlet对象,和servletName放入servlet容器中
super.onStartup(servletContext)
SpringServletContainerInitializer # onStartUp(font color=\"#f44336\
initFlashMapManager(context)
创建根容器
new ContextLoaderListener(rootAppContext).setContextInitializers(getRootApplicationContextInitializers())
AbstractContextLoaderInitializer
初始化DispactcherServlet
AbstractAnnotationConfigDispatcherServletInitializer #createRootApplicationContext()
Spring MVC请求流程
对当前根容器进行监听
@HandlesTypes(WebApplicationInitializer.class)
this.context = createWebApplicationContext(servletContext);
servletContext.setAttribute(font color=\"#f44336\
initHandlerExceptionResolvers(context)
initMultipartResolver(context)
cwac.setParent(rootContext)
servletContext.addListener(listener)
initHandlerMappings(context)
/META-INF/service/javax.servlet.ServletContainerInitializer
initViewResolvers(context)
initHandlerAdapters(context)
initRequestToViewNameTranslator(context)
启动
收藏
收藏
0 条评论
下一页