springMvc 的初始化流程;

在分析DispatcherServlet之前,我们先看下DispatcherServlet的继承关系
这里写图片描述

springmvc是主流的MVC框架,我先从使用开始一步一步解析其初始化过程,springmvc的核心是DispatcherServlet,它是前端控制器,负责拦截客户端发过来的请求,然后解析请求进行分发。
DispatcherServlet是基于Servlet的,所以使用springmvc先在web.xml中配置DispatcherServlet

这里写图片描述

上面说到在web容器启动时会会加载DispatcherServlet,每个Servlet在第一次加载时都会调用其init()方法,但是DispatcherServlet本身没有这个方法,所以系统会去它父类寻找init()方法,最后在HttpServletBean找到,调用,以下是init()方法源:码

一.HttpServletBean的init()方法
这里写图片描述

备注:
比如上面这段配置,传递了contextConfigLocation参数,之后构造BeanWrapper,这里使用BeanWrapper,有2个理由:
1. contextConfigLocation属性在FrameworkServlet中定义,HttpServletBean中未定义
2. 利用Spring的注入特性,只需要调用setPropertyValues方法就可将contextConfigLocation属性设置到对应实例中,也就是以依赖注入的方式初始化属性。
然后设置DispatcherServlet中的contextConfigLocation属性(FrameworkServlet中定义)为web.xml中读取的contextConfigLocation参数,该参数用于构造SpringMVC容器上下文。

总结HttpServletBean的作用:
首先:获取web.xml的中配置DispatcherServlet的初始化参数,存放到一个参数容器 ServletConfigPropertyValues中,
其次:根据传进来的this创建对象包 裹者(BeanWrapper),本质上它就是DispatcherServlet
最后:通过bw.setPropertyValues(pvs, true);把参数设置到bw(即DispatcherServlet)里面去,最后调用子类的initServletBean()

二.FrameworkServlet的initServletBean()方法源码:

这里写图片描述

接下来看下initWebApplicationContext方法的具体实现逻辑:
这里写图片描述
这里写图片描述

接下来看创建springMVC 的ioc容器方法createWebApplicationContext(WebApplicationContext parent)
这里写图片描述

最后看下DispatcherServlet。
DispatcherServlet覆写了FrameworkServlet中的onRefresh方法:
这里写图片描述

总结
web应用启动时扫描web.xml文件,扫描到DispatcherServlet,对其进行初始化
调用DispatcherServlet父类的父类HttpServletBean的init()方法,把配置DispatcherServlet的初始化参数设置到DispatcherServlet中,调用子类FrameworkServlet的initServletBean()方法
initServletBean()创建springMVC容器实例并初始化容器,并且和spring父容器进行关联,使得mvc容器能访问spring容器里面的bean,之后调用子类DispatcherServlet的onRefresh(ApplicationContext context)方法
onRefresh(ApplicationContext context)进行DispatcherServlet的策略组件初始化工作,url映射初始化,文件解析初始化,运行适配器初始化等等。

Servlet的作用:

  1. HttpServletBean
      主要做一些初始化的工作,将web.xml中配置的参数设置到Servlet中。比如servlet标签的子标签init-param标签中配置的参数。

  2. FrameworkServlet
      将Servlet与Spring容器上下文关联。其实也就是初始化FrameworkServlet的属性webApplicationContext,这个属性代表SpringMVC上下文,它有个父类上下文,既web.xml中配置的ContextLoaderListener监听器初始化的容器上下文。

  3. DispatcherServlet
      初始化各个功能的实现类。比如异常处理、视图处理、请求映射处理等。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值