加载 BeanDefinition 的准备工作
这里先简单介绍一下 BeanDefinition。它是 Spring 框架中一个重要的接口,用来描述 Spring 容器中一个 Bean 实例的各种信息。在 Spring 实例化 Bean 之前,先要加载这些 Bean 的信息,这些信息就会保存在 BeanDefinition 中。
loadBeanDefinitions
重载方法
言归正传,先看loadBeanDefinitions
方法的代码:
@Override
public int loadBeanDefinitions(String... locations) throws BeanDefinitionStoreException {
Assert.notNull(locations, "Location array must not be null");
int count = 0;
for (String location : locations) {
count += loadBeanDefinitions(location);
}
return count;
}
这里对参数中传入的所有配置文件路径进行了遍历,对每一个路径调用重载方法按顺序分别解析。这里调用的重载方法定义如下:
@Override
public int loadBeanDefinitions(String location) throws BeanDefinitionStoreException {
return loadBeanDefinitions(location, null);
}
这里又调用了一个重载方法,并且我们留意到,增加了第二个参数,传入值为空。方法代码如下:
public int loadBeanDefinitions(String location, @Nullable Set<Resource> actualResources) throws BeanDefinitionStoreException {
ResourceLoader resourceLoader = getResourceLoader();
if (resourceLoader == null) {
throw new BeanDefinitionStoreException(
"Cannot load bean definitions from location [" + location + "]: no ResourceLoader available");
}
if (resourceLoader instanceof ResourcePatternResolver) {
// Resource pattern matching available.
try {
Resou