天天看點

spring第一篇----XmlBeanFactory 小結

跟着《spring源碼深度解析》學習spring

做過java開發,我們對以下的代碼一定很熟悉,這是最基本的spring使用方式

public static void main(String[] args) throws InterruptedException {
		BeanFactory bf = new XmlBeanFactory(new ClassPathResource("spring-test.xml"));
	}
           

我們先來看看XmlBeanFactory類:

public class XmlBeanFactory extends DefaultListableBeanFactory {

	private final XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(this);

	public XmlBeanFactory(Resource resource) throws BeansException {
		this(resource, null);
	}


	public XmlBeanFactory(Resource resource, BeanFactory parentBeanFactory) throws BeansException {
		super(parentBeanFactory);
		this.reader.loadBeanDefinitions(resource);
	}

}
           

XmlBeanFactory繼承了DefaultListableBeanFactory類,DefaultListableBeanFactory類是spring注冊和加載bean的預設實作;

我們檢視上面的源碼可以發現其實XmlBeanFactory和DefaultListableBeanFactory的差別隻是在于,XmlBeanFactory中使用了Xml讀取器XmlBeanDefinitionReader,進而實作了個性化的BeanDefinitionReader讀取。

XmlBeanDefinitionReader的主要處理步驟:

1、通過繼承AbstractBeanDefinitionReader中的方法,使用ResourceLoader将資源檔案路徑轉換成對應的Resource檔案;

2、通過DocumentLoader對Resource檔案進行轉換,将Resource檔案轉換成Document檔案;

3、通過實作接口BeanDefinitionDocumentReader的DefaultBeanDefinitionDocumentReader類對Document進行解析,并使用BeanDefinitionParserDelegate對Element進行解析

再看一下XmlBeanDefinitionReader相關的幾個類:

1、ResourceLoader:定義資源加載器,主要用于根據給定的資源檔案位址傳回對應的Resource;

2、BeanDefinitionReader:主要用于定義資源檔案讀取并轉換成BeanDefinition的功能;

3、DocumentLoader:定義從資源檔案轉換為Document檔案的功能;

4、AbstractBeanDefinitionReader:對EnvironmentCapable、BeanDefinitionReader類定義的功能進行實作;

5、BeanDefinitionDocumentReader:定義讀取Document并注冊BeanDefinition的功能;

6、BeanDefinitionParserDelegate:定義解析Element的各種方法。