概述
Spring MVC DispatcherServlet(前端控制器)继承关系架构
-
-
FrameworkServlet
- 该类是DispatcherServlet的父类。该类的initServletBean()方法是初始化DispatcherServlet的主要方法
-
HttpServletBean
- 该类是FrameworkServlet的父类。由于该类继承自HttpServlet的。所以该类也就是一个servlet。所以按照servlet的启动流程。初始化时就会执行init方法。
-
启动原理(源码跟踪)
首先明白MVC的启动过程分为两步。第一步时初始化根IOC容器。也就是我上一篇文章所写的内容。在根IOC容器启动完成后,才会初始化DispatcherServlet这个Ioc容器。由于DispatcherServlet是一个servlet。在一个web应用中,可以有多个servlet存在。所以在一个根上下文可以作为多个servlet上下文的双亲上下文。所以根上下文或作为DispatcherServlet这个servlet上下文的父类存在。
-
- 第一步。初始化serlvet,即调用HttpServletBean的init()方法。该方法中会获取servlet的初始化参数,也就是我们在web.xml中配置的<init-param>这个标签的属性和值。对bean的属性进行配置。如图
- 执行上图的initServletBean()方法。 该方法是由它的子类去进行具体的初始化。该方法就做了一件事。调用initWebApplicationContext()去初始化一个新的上下文。作为DispatcherServlet的上下文环境
- 执行initWebApplicationContext()方法,首先会获取根上下文。因为在初始化根上下文的时候,根上下文是存放在ServletContext中的。所以这里用WebApplicationContextUtils类的静态方法来获取。
接着就是创建一个新的上下文wac,并且调用createWebApplicationContext()方法,在此方法的实现中,如果在web.xml中没有配置具体的上下文实现类。则spring会使用默认的实现类。也就是XmlWebApplicationContext
同样这个参数也可以在web.xml配置,比如
注意:这个标签必须要配在servlet标签的里面。因为这个是代表servlet的初始化参数
然后初始化后就需要对设置父类的上下文配置。setParent()方法、setConfigLocation()方法。最后在执行configureAndRefreshWebApplicationContext()方法。这个方法就是同初始化根上下文的那个方法一样。都是给该上下文设置设置ServletContext、设置ConfigLocation等。最后调用refresh()方法初始化IoC容器。如图:
这样。一个新的IOC容器也就建立完成了。
- 然后IOc创建完后,还要初始化MVC其他模块。比如支持国际化的LocaleResolver、支持HandlerMappings、以及视图生成的ViewResolvers等的初始化,如图:
- 好。这次就先记录到这。
- 第一步。初始化serlvet,即调用HttpServletBean的init()方法。该方法中会获取servlet的初始化参数,也就是我们在web.xml中配置的<init-param>这个标签的属性和值。对bean的属性进行配置。如图
转载于:https://www.cnblogs.com/zl999/p/10053981.html
最后
以上就是唠叨外套为你收集整理的Spring MVC DispatcherServlet启动过程原理分析的全部内容,希望文章能够帮你解决Spring MVC DispatcherServlet启动过程原理分析所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复