spring源碼解析之(DefaultListableBeanFactory)

首先咱們來看下繼承圖 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);



SingletonBeanRegistry單例註冊器,包含操做單例的一些方法




AbstractAutowireCapableBeanFactory主要實現了AutowireCapableBeanFactory方法,即自動裝配。同時繼承了AbstractBeanFactory類。

AbstractBeanFactory實現了ConfigurableBeanFactory,配置bean,同時繼承了FactoryBeanRegistrySupport

FactoryBeanRegistrySupport至於這裏就不在往上查找了,往上走主要是爲了bean的註冊,不管是單例仍是普通註冊,總之這裏就是註冊。

至此DefaultListableBeanFactory的剖析就結束了

相關文章
相關標籤/搜索