首先咱們來看下繼承圖 java
在3.1以前有一個XmlBeanFactory類,在3.1以後被標記爲Deprecated狀態,官方文檔建議直接使用DefaultListableBeanFactory和XmlBeanDefinitionReader類來實現XmlBeanFactory的功能。具體使用以下: this
DefaultListableBeanFactory factory = new DefaultListableBeanFactory(); new XmlBeanDefinitionReader(factory).loadBeanDefinitions(new ClassPathResource(format("factoryBean.xml", class));//class類 Object result = factory.getBean("factoryBean");
XmlBeanDefinitionReader.loadBeanDefinitions(Resource resource)方法爲從指定的XML文件加載bean定義。 spa
其中它實現了BeanDefinitionReader接口,其中也能夠使用屬性文件的方式讀取,PropertiesBeanDefinitionReader具體使用方法看以下官方實例 prototype
employee.(class)=MyClass // bean is of class MyClass employee.(abstract)=true // this bean can't be instantiated directly employee.group=Insurance // real property employee.usesDialUp=false // real property (potentially overridden) salesrep.(parent)=employee // derives from "employee" bean definition salesrep.(lazy-init)=true // lazily initialize this singleton bean salesrep.manager(ref)=tony // reference to another bean salesrep.department=Sales // real property techie.(parent)=employee // derives from "employee" bean definition techie.(scope)=prototype // bean is a prototype (not a shared instance) techie.manager(ref)=jeff // reference to another bean techie.department=Engineering // real property techie.usesDialUp=true // real property (overriding parent value) ceo.$0(ref)=secretary // inject 'secretary' bean as 0th constructor arg ceo.$1=1000000 // inject value '1000000' at 1st constructor arg
還有一個GroovyBeanDefinitionReader類也就不說了,如今Groovy畢竟用的比較少 code
AbstractAutowireCapableBeanFactory是一個抽象類,實現了ConfigurableListableBeanFactory, BeanDefinitionRegistry兩個接口而且這個抽象類是能夠序列號的實現了Serializable orm
BeanDefinitionRegistry這個是BeanDefinition的註冊
xml
至於往上走能夠看出BeanFactory是鼻祖。 繼承
DefaultListableBeanFactory分紅兩個分支
接口
1.實現ConfigurableListableBeanFactory接口來達到配置bean的功能,其主要完成自動裝配,操做列表bean,配置bean。 文檔
其中它又繼承了三個接口ListableBeanFactory, AutowireCapableBeanFactory, ConfigurableBeanFactory
ListableBeanFactory:bean集合操做接口
AutowireCapableBeanFactory:自動裝配接口
ConfigurableBeanFactory:配置bean的接口
其中ConfigurableBeanFactory配置接口又繼承自HierarchicalBeanFactory, SingletonBeanRegistry
HierarchicalBeanFactory是一個父bean加強器,增長了
獲得父BeanFactory BeanFactory getParentBeanFactory(); 獲得當前BeanFactory中的bean(忽略父工廠中的bean) boolean containsLocalBean(String name);
AbstractAutowireCapableBeanFactory主要實現了AutowireCapableBeanFactory方法,即自動裝配。同時繼承了AbstractBeanFactory類。
AbstractBeanFactory實現了ConfigurableBeanFactory,配置bean,同時繼承了FactoryBeanRegistrySupport
FactoryBeanRegistrySupport至於這裏就不在往上查找了,往上走主要是爲了bean的註冊,不管是單例仍是普通註冊,總之這裏就是註冊。
至此DefaultListableBeanFactory的剖析就結束了