老生谈spring(四):xml的解析
1、接着上一节,我们继续看loadBeanDefinitions代码(代码被我简化成伪代码)
public int loadBeanDefinitions(String location, @Nullable Set<Resource> actualResources) throws BeanDefinitionStoreException {
ResourceLoader resourceLoader = getResourceLoader();
if (resourceLoader instanceof ResourcePatternResolver) {
try {
Resource[] resources = ((ResourcePatternResolver) resourceLoader).getResources(location);
//加载多个xml文件
int count = loadBeanDefinitions(resources);
if (actualResources != null) {
Collections.addAll(actualResources, resources);
}
return count;
}
catch (IOException ex) {
...
}
}
else {
Resource resource = resourceLoader.getResource(location);
//加载一个xml文件
int count = loadBeanDefinitions(resource);
if (actualResources != null) {
actualResources.add(resource);
}
return count;
}
}
2、其实loadBeanDefinitions就算load的是Resource数组,也是循环调用loadBeanDefinitions去加载xml文件,因此我们主要看父类的重载方法loadBeanDefinitions,这个方法在XmlBeanDefinitionReader给出了实现。(又是调了重载方法,我直接把调用的方法也贴在一起)
@Override
public int loadBeanDefinitions(Resource resource) throws BeanDefinitionStoreException {
return loadBeanDefinitions(new EncodedResource(resource));
}
public int loadBeanDefinitions