首先我们来看下继承图
在3.1之前有一个XmlBeanFactory类,在3.1之后被标记为Deprecated状态,官方文档建议直接使用DefaultListableBeanFactory和XmlBeanDefinitionReader类来实现XmlBeanFactory的功能。具体使用如下:
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定义。
其中它实现了BeanDefinitionReader接口,其中也可以使用属性文件的方式读取,PropertiesBeanDefinitionReader具体使用方法看如下官方实例
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毕竟用的比较少
AbstractAutowireCapableBeanFactory是一个抽象类,实现了ConfigurableListableBeanFactory, BeanDefinitionRegistry两个接口并且这个抽象类是可以序列号的实现了Serializable
BeanDefinitionRegistry这个是BeanDefinition的注册
至于往上走可以看出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的剖析就结束了