在使用springmvc框架,会在web.xml文件配置一个DispatcherServlet,这正是web容器开始初始化,同时会在建立自己的上下文来持有SpringMVC的bean对象(已经在 spring mvc源码之-Servlet初始化(一))。

从名字来看,它是一个Servlet。它的定义如下:

public class DispatcherServlet extends FrameworkServlet {

    它是继承FrameworkServlet,来看一下整个的继承关系。

spring mvc源码之-Servlet初始化(二)

首先DispatcherServlet也是一个Servlet,初始化从init()方法开始。

下面就具体看看ini()是怎么实现的吧。

1.Servlet 是个接口;

spring mvc源码之-Servlet初始化(二)
2.GenericServlet 中实现了初始化方法。

spring mvc源码之-Servlet初始化(二)
这里调用了一个没有参数的init();是个空方法;

spring mvc源码之-Servlet初始化(二)
3.HttpServlet 没有对初始化相关的方法进行覆盖。

4.HttpServletBean,重写了init()方法。

spring mvc源码之-Servlet初始化(二)
其中又掉了一个initServletBean();方法,这本类中也是个空实现。

spring mvc源码之-Servlet初始化(二)
5.FrameworkServlet 果不其然的重写了上边留空的方法:initServletBean();

spring mvc源码之-Servlet初始化(二)
在这个方法中最重要的就是调用了一个initWebApplicationContext() 方法。

spring mvc源码之-Servlet初始化(二)
一系列的赋值和判断,最关键的,跟初始化相关的,就是调用了onRefresh(),同样的套路,这个方法在本类中为空实现,留给子类去实现。

spring mvc源码之-Servlet初始化(二)

6.终于到了DispatcherServlet,找到onRefresh(),简单!调用initStrategies(ApplicationContext context);这个方法就在下边,这下清楚了,一堆的初始化方法。具体代码就不粘了。

spring mvc源码之-Servlet初始化(二)
到这里整个加载过程就理清楚了。

简单提一句,根据如下的静态代码:

spring mvc源码之-Servlet初始化(二)

 

对应的结合spring mvc的数据流程图

spring mvc源码之-Servlet初始化(二)

大部分组件的加载包都是基于配置完成的。

相关文章:

  • 2021-05-28
  • 2022-12-23
  • 2021-07-10
  • 2021-09-22
  • 2021-07-06
  • 2021-10-07
猜你喜欢
  • 2021-07-09
  • 2021-12-13
  • 2022-12-23
  • 2021-05-31
  • 2022-12-23
  • 2022-12-23
  • 2021-09-02
相关资源
相似解决方案