一、启动入口

Tomcat容器启动Web.xml配置servlet。DispatcherServlet继承关系
->FrameworkServlet
->HttpServletBean
->HttpServlet(servlet-api.jar包中)
在这里插入图片描述
servlet初始化时先调用init方法。调用HttpServletBean中init。Init中执行initServletBean。
在这里插入图片描述

二、initServletBean

继续调用FrameworkServlet中initServletBean
在这里插入图片描述
继续执行FrameworkServlet中initWebApplicationContext,继续执行createWebApplicationContext方法。
在这里插入图片描述

如下图把spring容器当做父容器放入springMVC容器中,设置了mvc配置文件地址,然后调用configureAndRefreshWebApplicationContext方法。
在这里插入图片描述

三、refresh

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

四、onRefresh

创建完组件后,继续执行onRefresh方法。
在这里插入图片描述

五、initStrategies

进入dispatch中initStrategies,此方法初始化HandlerMappings
handlerAdapters、
handlerExceptionResolvers、ViewResolvers等组件。
在这里插入图片描述

六、initHandlerMappings

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

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐