《spring設計思想》6 beanDefinition的加載實現

上面第四節講到了spring的DI/look up的數據來源,這次分析一下spring中的beanDefinition是怎麼加載到beanFactory中的。

想一想我們在平時的工作中加載spring beanDefinition的幾個來源

1:xml配置文件

2:properties文件

3:註解標註

那麼針對三個不同的來源,會使用不同的手段加載到spring容器中。相當於spring設計一個接口,根據不同的規則實現特殊的類。

spring設計的接口就是BeanDefinitionReader

簡單的看一下BeanDefinitionReader接口的方法

接口定義了loadBeanDefinitions方法,入參是Resource或者String,代表beanDefinitions配置資源,

具體的實現類:

具體有三個,GroovyBeanDefinitionReader / PropertiesBeanDefinitionReader /XmlBeanDefinitionReader。從名字上就能看出主要是解析什麼養的BeanDefinitions的配置資源。一般環境中會用到PropertiesBeanDefinitionReader 和 XmlBeanDefinitionReader

但是沒有看到解析註解的beanDefinitionReader;原因是,AnnotatedBeanDefinitionReader沒有實現BeanDefinitionReader接口,因爲AnnotatedBeanDefinitionReader沒有必要解析Spring的Resource類型,只要掃描jar包的class文件就可以了。

所以Spring 中委託XmlBeanDefinitionReader/PropertiesBeanDefinitionReader/AnnotatedBeanDefinitionReader來解析beanDefintion,加載到spring容器中。其實這個容器很簡單

接口名稱BeanDefinitionRegistry

主要的方法就是registerBeanDefinition。

而Spring中的默認實現是DefaultListableBeanFactory

這個類非常的有意思因爲在AbstractRefreshableApplication中包含了DefaultListableBeanFactory對象。

ClassPathXmlApplicationContext

XmlWebApplicationContext

AnnotationConfigWebApplicationContext都繼承了該類。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章