Spring源码讲解之 loadBeanDefinitions 方法

loadBeanDefinitions 方法在 org.springframework.context.support.AbstractRefreshableApplicationContext 类中被定义,用来将 bean 定义信息加载到 bean 工厂中,该方法会在 org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory() 方法中被调用,调用该方法需要传递一个 org.springframework.beans.factory.support.DefaultListableBeanFactory 类型的参数,该方法返回值为空,当解析 bean 定义出错是会抛出 org.springframework.beans.BeansException 异常,当加载 bean 配置文件出错时会抛出 java.io.IOException 异常。

源码定义

protected abstract void loadBeanDefinitions(DefaultListableBeanFactory beanFactory)
			throws BeansException, IOException;

loadBeanDefinitions 方法在 org.springframework.context.support.AbstractXmlApplicationContext 中的实现

protected void loadBeanDefinitions(DefaultListableBeanFactory beanFactory) throws BeansException, IOException {
	// 创建一个 xml bean 定义阅读器
	XmlBeanDefinitionReader beanDefinitionReader = new XmlBeanDefinitionReader(beanFactory);

	// 设置 bean 定义阅读器的运行环境
	beanDefinitionReader.setEnvironment(this.getEnvironment());
	beanDefinitionReader.setResourceLoader(this);
	beanDefinitionReader.setEntityResolver(new ResourceEntityResolver(this));

	// 初始化 bean 定义阅读器,子类可以重写该方法进行自定义
	initBeanDefinitionReader(beanDefinitionReader);
	// 加载 bean 定义资源
	loadBeanDefinitions(beanDefinitionReader);
}

initBeanDefinitionReader 方法在 org.springframework.context.support.AbstractXmlApplicationContext 类中的实现

protected void initBeanDefinitionReader(XmlBeanDefinitionReader reader) {
	// 设置是否使用 XML 验证
	// this.validating 的值在该类中默认是 true
	reader.setValidating(this.validating);
}

loadBeanDefinitions 方法在 org.springframework.context.support.AbstractXmlApplicationContext 类中的实现

protected void loadBeanDefinitions(XmlBeanDefinitionReader reader) throws BeansException, IOException {
	// 获取 Resource 类型的配置,默认实现返回 null,子类可以重写该方法进行扩展
	Resource[] configResources = getConfigResources();
	if (configResources != null) {
		// 加载配置文件中的 bean 定义
		reader.loadBeanDefinitions(configResources);
	}
	// 获取 String 形式的配置,默认实现返回 null,子类可以重写该方法进行扩展
	String[] configLocations = getConfigLocations();
	if (configLocations != null) {
		// 加载配置文件中的 bean 定义
		reader.loadBeanDefinitions(configLocations);
	}
}

收工,loadBeanDefinitions 方法源码分析讲解完毕,希望能对你有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值