【Spring源碼分析】二、解析及註冊BeanDifinitions

上一篇文章中,大致分析了,Spring BeanFactory的類結構圖,本篇文章分析如何解析配置文件和註冊Bean的配置

一、源碼切入點

private final XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(this);

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

重點在this.reader.loadBeanDefinitions(resource);這裏,這裏不得不說一下,spring對很好的應用了對象的單一職責原則

二、分析XmlBeanDefinitionReader

XmlBeanDefinitionReader UML圖
在這裏插入圖片描述

  • BeanDefinitionReader:該接口主要是定義了2個重要方法,一個是getRegistry(); 因爲DefaultListableBeanFactory也實現了接口BeanDefinitionReader,所以其實這個方法就是持有bean factory,參考private final XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(this); 這個構造方法,this就是beanfactory。 還有一個是loadBeanDefinitions():這個就是解析配置文件的,並且註冊bean定義
  • AbstractBeanDefinitionReader:spring的老套路,先定義一個接口,然後讓一個抽象類實現該接口,進行默認實現,也可以理解接口的適配,這樣真正的實現類繼承該抽象類後,只需要實現重點功能就可。
  • XmlBeanDefinitionReader:真正的實現類,主要方法doLoadBeanDefinitions
try {
	Document doc = doLoadDocument(inputSource, resource);
		return registerBeanDefinitions(doc, resource);
}

方法doLoadDocument主要是解析xml文件成document文檔,沒什麼好說的。
方法registerBeanDefinitions就是讀取document文件,然後封裝成BeanDefinition,然後緩存到map中。


如果我有時間會詳細分析上面2個方法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章