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

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

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

public class DispatcherServlet extends FrameworkServlet {

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

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

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

1.Servlet 是个接口;


2.GenericServlet 中实现了初始化方法。


这里调用了一个没有参数的init();是个空方法;


3.HttpServlet 没有对初始化相关的方法进行覆盖。

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


其中又掉了一个initServletBean();方法,这本类中也是个空实现。


5.FrameworkServlet 果不其然的重写了上边留空的方法:initServletBean();


在这个方法中最重要的就是调用了一个initWebApplicationContext() 方法。


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

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


到这里整个加载过程就理清楚了。

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

 

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

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

猜你喜欢

转载自blog.csdn.net/liangkun_java/article/details/81288516