SpringIoC源码分析一之从ClassPathXmlApplicationContext进入

引言

我们在构建WEB项目的时候,会在web.xml中配置Spring的监听器,然后监听器完成了我们容器的初始化,这个我们以后再说。今天我们来学习一下ClassPathXmlApplicationContext这个类。这里只进行简单的解析,重点方法Refresh会抽出几章的内容来讲解,可能大家在看源码的时候会东张西望,也就是看这当前的类,然后看着看着由点击到另一个类,反复如此,你就会蒙圈,所以不建议这么看,咱们从方法进入,先把方法看明白,先不要看类和类之间的关系,这样能使我们更快的理解方法的作用,不要急于求成。

ClassPathXmlApplicationContext

作用:对Spring容器及Bean工厂的初始化。

本章内容概括:对ClassPathXmlApplicationContext的简单了解。

ClassPathXmlApplicationContext

我们在最初学习Spring的时候,经常会实例化这个类,然后通过这个类的实例来获取Bean实例,如下代码:

ApplicationContext context = new ClassPathXmlApplicationContext("springConfig.xml") ;
UserTest test = (UserTest)context.getBean("userTest") ;

这里初始化一个ClassPathXmlApplicationContext对象,然后赋给ApplicationContext接口,然后通过context实例getBean一个UserTest的实例。这是一个最简单的SpringIoC的应用。下面我们来看一下他的内部实现。

内部代码初识

1. ClassPathXmlApplicationContext的构造方法

我们看一下ClassPathXmlApplicationContext类的7个构造方法:

//无参构造方法
public ClassPathXmlApplicationContext() { }
//用父类初始化ClassPathXmlApplicationContext, 目前我不知道具体的应用场景
public ClassPathXmlApplicationContext(ApplicationContext parent) {
    super(parent);
}
//常用构造方法,根据传递的xml的文件地址,来初始化对象
public ClassPathXmlApplicationContext(String configLocation) throws BeansException {
    this(new String[] {configLocation}, true, null);
}
//根据多个xml文件地址来初始化对象
public ClassPathXmlApplicationContext(String... configLocations) throws BeansException {
    this(configLocations, true, null);
}
//根据xml文件路径数组和父类进行初始化
public ClassPathXmlApplicationContext(String[] configLocations, ApplicationContext parent) throws BeansException {
    this(configLocations, true, parent);
}
//根据xml文件路径数组和是否刷新参数进行初始化
public ClassPathXmlApplicationContext(String[] configLocations, boolean refresh) throws BeansException {
    this(configLocations, refresh, null);
}
//这个构造方法是真正初始化动作,重点就在这个方法
public ClassPathXmlApplicationContext(String[] configLocations, boolean refresh, ApplicationContext parent)
			throws BeansException {
    super(parent);
    setConfigLocations(configLocations);
    if (refresh) {
        refresh();
    }
}

我们可以看到,其他6个构造方法,最终都会调用这个构造方法。

ClassPathXmlApplicationContext(String[] configLocations, boolean refresh, ApplicationContext parent)

2.ClassPathXmlApplicationContext构造方法的解析

我们来解释一下构造方法中各个方法的作用:

public ClassPathXmlApplicationContext(String[] configLocations, boolean refresh, ApplicationContext parent)
			throws BeansException {
    //调用父类构造方法
    super(parent);
    /*设置spring配置文件路径,并初始化抽象父类AbstractRefreshableConfigApplicationContext的configLocations参数,
     *configLocations参数是一个String数组,存储多个xml文件路径,这个方法比较简单,朋友们自己看就行
     */
    setConfigLocations(configLocations);
    //重点来啦,refresh方法将会把我们所有IoC的初始化完成,包括Bean的初始化等操作
    if (refresh) {
        refresh();
    }
}
如上的代码和注释,已经写得很清楚了,至于Refresh方法,由于太过复杂,分章节进行讲解,下面我们来简单的看一下ClassPathXmlApplicationContext的相关类,也就是继承和实现的关系。这里只介绍部分与ClassPathXmlApplicationContext相关的类关系,不然会太多,就算写出来也没什么用!反正我记不住!先简单了解一下。





















  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值