[笔记整理]1-1 DispatcherServlet的初始化[源码]

1-1.DispatcherServlet的初始化

springIOC的初始化的完成要在DispatcherServlet的初始化完成之前

DispatcherServlet 本质上是一个 Servlet,所以天然的遵循 Servlet 的生命周期。所以宏观上是 Servlet

生命周期来进行调度。

(springMVC管理控制层,服务层由spring管理)

DispatcherServlet的初始化实现顺序

在GenericServlet中,实现了Servlet接口初始化方法,同时调用自身初始化方法

HttpServlet没有实现父类的初始化方法

HttpServletBean实现了GenericServlet的初始化方法,同时调用自身的initServletBean()初始化方法

FrameworkServlet实现HttpServletBean的初始化方法,

调用this.initWebApplicationContext();来初始化IOC容器

先判断当前IOC容器是不是null

如果是null,则调用this.findWebApplicationContext()寻找IOC容器

如果还找不到,依旧是null,则创造一个IOC容器

红框语句是真正创建springMVC的IOC容器的方法,BeanUtils.instantiateClass

绿框语句用来创建springMVC的IOC容器的父容器,这个父容器是spring的IOC容器

这样Spring IOC容器的组件就对SpringMVC IOC容器可见,这就是为什么Controller组件能够自动装配service组件(控制层由SpringMVC管理,其他层的组件由Spring管理)

子容器可以访问父容器,但父容器无法访问子容器

创建完后刷新IOC容器,该刷新方法由子类DispatcherServlet来实现

黄框语句获取当前IOC容器,并共享到最大的域对象ServletContext中

ServletContext.setAttribute(属性名,IOC对象);

DispatcherServlet实现父类FrameworkServlet的刷新容器方法

onRefresh调用初始化策略initStrategies来初始化SpringMVC的组件

1-2.DispatcherServlet处理请求过程

HttpServlet实现service方法,并调用自身的service方法去实现主要功能

FrameworkServlet使用service,当请求方式为PATCH或者为null时,就调用父类service处理

否则调用processRequest方法

当调用父类service方法时,由于FrameworkServlet重写了doGET、doPOST等响应对应请求的方法,

所以父类service调用doGET、doPOST等方法时,使用的是子类FrameworkServlet重写的方法

在FrameworkServlet中,无论是什么请求方式,最终都会调用processRequest方法

其中的doService方法是抽象方法,由DispatcherServlet来实现

在DispatcherServlet中,doService又调用了doDispatch方法来最终处理请求

最后processDispatchResult调用render渲染方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

第二印象Coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值