springMvc 启动流程
一、启动入口Tomcat容器启动Web.xml配置servlet。DispatcherServlet继承关系->FrameworkServlet->HttpServletBean->HttpServlet(servlet-api.jar包中时)servlet初始化时先调用init方法。调用HttpServletBean中init。Init中执行initServletBean。二、
一、启动入口
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);其他方法类似。
更多推荐
所有评论(0)