Spring IoC的细节--AbstractXmlApplicationContext(@Nullable ApplicationContext parent)

ClassPathXmlApplicationContext:

    public ClassPathXmlApplicationContext(
			String[] configLocations, boolean refresh, @Nullable ApplicationContext parent)
			throws BeansException {

		//设置传入进来的父容器、创建Bean资源解析器
		super(parent);  // 1

		//将传入进来的配置文件路径(如spring/aaa.xml,spring/bbb.xml)保存起来
		setConfigLocations(configLocations); // 2

		if (refresh) {

			//初始化最核心的方法,就是refresh()
			//把所有的Bean重新构造一遍
			refresh(); // 3 
		}
	}

代码1调用链如下:

AbstractXmlApplicationContext:

    public AbstractXmlApplicationContext(@Nullable ApplicationContext parent) {
		super(parent);
	}

AbstractRefreshableConfigApplicationContext:

    public AbstractRefreshableConfigApplicationContext(@Nullable ApplicationContext parent) {
		super(parent);
	}

AbstractRefreshableApplicationContext:

    public AbstractRefreshableApplicationContext(@Nullable ApplicationContext parent) {
		super(parent);
	}

AbstractApplicationContext:

public AbstractApplicationContext(@Nullable ApplicationContext parent) {
		this();
		setParent(parent);
	}

此处分两步:
第一步:调用AbstractApplicationContext的无参构造器,初始化ResourcePatternResolver对象,其对应的实现是PathMatchingResourcePatternResolver。

    public AbstractApplicationContext() {
		this.resourcePatternResolver = getResourcePatternResolver();
	}
	
	protected ResourcePatternResolver getResourcePatternResolver() {
		return new PathMatchingResourcePatternResolver(this);
	}

第二步:保存父容器,并将父容器的环境与当前容器环境合并。

AbstractApplicationContext:

    public void setParent(@Nullable ApplicationContext parent) {
		this.parent = parent;
		if (parent != null) {
			Environment parentEnvironment = parent.getEnvironment();
			if (parentEnvironment instanceof ConfigurableEnvironment) {
				//假如有父上下文,则将当前环境与父上下文的环境合并
				getEnvironment().merge((ConfigurableEnvironment) parentEnvironment);
			}
		}
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值