springMvc 启动流程

一、启动入口

Tomcat容器启动Web.xml配置servlet。DispatcherServlet继承关系
->FrameworkServlet
->HttpServletBean
->HttpServlet(servlet-api.jar包中)
springMvc 启动流程_第1张图片
servlet初始化时先调用init方法。调用HttpServletBean中init。Init中执行initServletBean。
springMvc 启动流程_第2张图片

二、initServletBean

继续调用FrameworkServlet中initServletBean
springMvc 启动流程_第3张图片
继续执行FrameworkServlet中initWebApplicationContext,继续执行createWebApplicationContext方法。
springMvc 启动流程_第4张图片

如下图把spring容器当做父容器放入springMVC容器中,设置了mvc配置文件地址,然后调用configureAndRefreshWebApplicationContext方法。
springMvc 启动流程_第5张图片

三、refresh

继续调用refresh方法
springMvc 启动流程_第6张图片
进入AbstractApplicationContext中的refresh方法。此方法和springIoc容器初始化一样(可以参考我的博客spring容器初始化过程)。obtainFreshBeanFactory中把xml配置文件中配置组件放入BeanDefinition中,finishBeanFactoryInitialization中遍历BeanDefinition创建组件,注意springMvc容器是spring容器的子容器,子容器可以读取容器组件,父无法读取子容器组件。
springMvc 启动流程_第7张图片

四、onRefresh

创建完组件后,继续执行onRefresh方法。
springMvc 启动流程_第8张图片

五、initStrategies

进入dispatch中initStrategies,此方法初始化HandlerMappings
handlerAdapters、
handlerExceptionResolvers、ViewResolvers等组件。
springMvc 启动流程_第9张图片

六、initHandlerMappings

以handlerMappings为例,在请求接口时(springmvc请求流程),进入到DispatcherServlet的doDispatch中getHandler方法。this.handlerMappings中放入值就是在initStrategies中。
springMvc 启动流程_第10张图片
继续看initStrategies中initHandlerMappings。从容器中获取HandlerMapping类型的对象,放入到handlerMappings。此方法可以获取容器中对象的Map matchingBeans =BeanFactoryUtils.beansOfTypeIncludingAncestors(context, HandlerMapping.class, true, false);其他方法类似。
springMvc 启动流程_第11张图片

你可能感兴趣的:(springMvc 启动流程)