Spring初始化

来源:互联网 发布:管道保温计算软件 编辑:程序博客网 时间:2024/06/08 18:21

一.配置监听器

为了让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上下文的默认实现类:XmlWebAppliactionContextprivate 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上下文创建过程



























































原创粉丝点击