配置DispatcherServlet类时load-on-startup标签作用源码分析

我们在使用ssm时在 web.xml 中有如下配置

	<servlet>
		<servlet-name>DispatcherServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:application.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>

在  <servlet> 中有 <load-on-startup> 标签,该标签的作用是当 Tomcat 服务器发布 Web 项目时创建 DispatcherServlet 对象并执行 init 方法,然而 DispatcherServlet 类中并没有 init() 方法,而且 DispatcherServlet  的父类 FrameworkServlet 中也没有 inti() 方法,我们再去找 FrameworkServlet  的父类 HttpServletBean

 

最终我们在 HttpServletBean 中找到了 init() 方法

 

init() 方法中顺序执行会达到 initServletBean 方法,然而我们发现在 HttpServletBean 中该方法是一个抽象类

 

回到 FrameworkServlet  类中,我们可以看到 initServletBean 方法在 FrameworkServlet  中得到实现

 

initServletBean  中顺序推进,会执行 this.webApplicationContext = initWebApplicationContext(); 方法

initWebApplicationContext 方法中我们可以明确的看出,该方法在为 wac (WebApplicationContext对象)  赋值,而 if 语句中的 refreshEventReceived 常量在上面定义为 false, 所以 !refreshEventReceived  true 执行语句

 

然而 FrameworkServlet  中的 onRefresh 方法为一个抽象类

 

在他的子类 DispatcherServlet  中有 onRefresh 的实现方法

 

onRefresh 中进入 initStrategies 方法

initStrategies 初始化策略,该方法所调用的上述方法为 <load-on-startup>  的核心,对各种资源进行初始化。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值