Spring初始化 - 启动过程

一.配置监听器

为了让web容器启动时,也初始化Spring,则需要在web.xml中配置监听器ContextLoaderListener,web容器启动时触发监听器,初始化Spring
  <listener>  
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
    </listener>  

二.概述

1. ContextLoaderListener继承了ContextLoader,ContextLoader中有静态代码块
public class ContextLoaderListener extends ContextLoader implements ServletContextListener {
}
创建一个子类实例(new XxxClass()),执行过程:
	父类静态代码块—>
	子类静态代码块—>
	主方法(执行哪个程序就执行哪个程序的主方法)—>
	父类非静态代码块—>
	父类无参构造函数—>
	子类非静态代码块—>
	子类无参构造函数(若实际子类执行的是有参构造函数,则不执行无参构造函数)—>
	成员函数(指定执行哪个就执行哪个成员函数,若重写了父类成员函数,则只执行子类的成员函数)
2. 所以在创建ContextLoaderListener实例时,先执行了父类ContextLoader中的静态代码块:
	/**
	 * 类路径资源的名称(相对于ContextLoader类)
	 * 定义了ContextLoader的默认策略名称。
	 */
	private static final String DEFAULT_STRATEGIES_PATH = "ContextLoader.properties";

	// 记录了Spring上下文的默认实现类:XmlWebAppliactionContext
	private static final Properties defaultStrategies;

	// 静态代码块在类加载时加载
	static {
		// 从属性文件加载默认策略实现。
		try {
			ClassPathResource resource = new ClassPathResource(DEFAULT_STRATEGIES_PATH, ContextLoader.class);
			defaultStrategies = PropertiesLoaderUtils.loadProperties(resource);
		}
		catch (IOException ex) {
			throw new IllegalStateException("Could not load 'ContextLoader.properties': " + ex.getMessage());
		}
	}

3. 父类静态代码块执行完,属性defaultStrategies中记录了上下文默认实现 - XmlWebAppliactionContext
key:      org.springframework.web.context.WebApplicationContext
        value:  org.springframework.web.context.support.XmlWebApplicationContext

参数defaultStrategies用于没有在web.xml中配置Spring上下文的实现类,就会从defaultStrategies获取默认的上下文实现类

三.Spring上下文创建过程



























































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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值