一、DefaultListableBeanFactory
首先看一下結構

由圖可知XmlBeanFactory繼承自DefaultListableBeanFactory,而DefaultListableBeanFactory是整個bean加載的核心部分,是Spring注冊及加載bean的默認實現,而對於XmlBeanFactory與DefaultListableBeanFactory不同的地方其實是在XmlBeanFactory中使用了自定義的XML讀取器,實現了個性化讀取BeanDefinitionReader讀取。
類中方法

@Deprecated
@SuppressWarnings({"serial", "all"})
public class XmlBeanFactory extends DefaultListableBeanFactory {
private final XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(this);
/**
* Create a new XmlBeanFactory with the given resource,
* which must be parsable using DOM.
* @param resource XML resource to load bean definitions from
* @throws BeansException in case of loading or parsing errors
*/
public XmlBeanFactory(Resource resource) throws BeansException {
this(resource, null);
}
/**
* Create a new XmlBeanFactory with the given input stream,
* which must be parsable using DOM.
* @param resource XML resource to load bean definitions from
* @param parentBeanFactory parent bean factory
* @throws BeansException in case of loading or parsing errors
*/
public XmlBeanFactory(Resource resource, BeanFactory parentBeanFactory) throws BeansException {
super(parentBeanFactory);
this.reader.loadBeanDefinitions(resource);
}
}
DefaultListableBeanFactory繼承了AbstraceAutowireCapableBeanFactory並實現了ConfigurableListableBeanFctory以及BeanDefinitionRegistry接口。
public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFactory implements ConfigurableListableBeanFactory, BeanDefinitionRegistry, Serializable

二、XmlBeanDefinitionReader
XML配置文件的讀取是Spring中重要的功能,因為Spring的大部分功能都是以配置作為切入點的。
- ResourceLoader:定義資源加載器,主要應用於根據給定的資源文件地址返回對應的Resource.
- BeanDefinitionReader:主要定義資源文件讀取並轉換為BeanDefinition的各個功能
- EnviromentCapable:定義從資源文件加載到轉換為Document的功能
- AbstractBeanDefinitionReader:對EnviromentCapable、BeanDefinitionReader類定義的功能進行實現
- BeanDefinitionDocumentReader:定義讀取Document並注冊BeanDefinition功能
- BeanDefinitionParseDelegate:定義解析Element的各種方法。
1、通過繼承自AbstractBeanDefinitionReader中的方法,來使用ResourceLoader將資源文件路徑轉換為對應的Resource文件
2、通過DocumentLoader對Resource文件進行轉換,將Resource文件轉換為Document文件
3、通過實現接口BeanDefinitionDocumentReader的DefaultBeanDefinitionDocumentReader類對Document進行解析,並使用BeanDefinitionParserDelegate對Element進行解析。
