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 方法源码分析讲解完毕,希望能对你有所帮助。