BeanFactory

Posted hxwang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BeanFactory相关的知识,希望对你有一定的参考价值。

前言

   spring ioc容器的实现,从根源上是beanfactory,但真正可以作为一个可以独立使用的ioc容器是DefaultListableBeanFactory

1.BeanFactory体系结构图 

 

一个最简单的BeanFactory的使用样例只需要几行代码:

BeanFactory beanFactory = new DefaultListableBeanFactory();
Resource resource = new ClasspathResource("beans.xml");
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory);
reader.loadBeanDefinitions(resource);

AbstractBeanFactory实现了依赖关系处理

AbstractAutowireCapleBeanFactory实现了bean的create过程 

DefaultListableBeanFactory实现了BeanDefinition的管理

下面看看beanfactory各接口功能的定义

1.首先是顶层的BeanFactory,从它的定义方法来看,主要提供获取Bean对象,判断给定的Bean对象是否被当前的BeanFactory加载过,是否是Singleton/Prototype,类型是否匹配,等等最基本的功能。

2.左边分支:ListableBeanFactory,此接口继承了BeanFactory的同时,提供了列举Bean的功能,它能够列举当前BeanFactory加载的所有bean:列举所有Bean的名字或者满足某种类型的bean的名字,根据类型返回所有bean对象等。但是它无法获取父层BeanFactory加载的单例bean

3.看中间分支:HierachicalBeanFactory和ConfigurableBeanFactory,AutowireCapableBeanFactory

    HierachicalBeanFactory比较简单,它主要提供父BeanFactory的功能,通过它能够获取当前BeanFactory的父BeanFactory。(比如,若在A工厂启动并加载bean之前,B工厂先启动并加载了,那B就是A的父工厂),这样就能让当前的beanfactory加载父beanfactory加载的bean了,弥补了ListableBeanFactory欠缺的功能。

    ConfigurableBeanFactory就是在HierachicalBeanFactory的基础上增加了可配置的功能,包括注册别名、注册单例、设置classloader、是否缓存BeanMetadata、设置BeanPostProcessor、配置Bean依赖等等。ConfigurableBeanFactory还继承了SingletonBeanRegistry接口主要是用来定义用来共享的bean实例的注册表,通过它可以使得BeanFactory实现统一的方式暴露其单例bean管理。

  AutowireCapableBeanFactory,主要是提供Bean的自动装配功能,为已有的Bean装配属性等

4.再看右边分支

  先是 SingletonBeanRegisty/DefautSigletonBeanRegistry/FactoryBeanRegistrySupport

SigletonBeanRegistry在前面已提到,DefaultSigletonBeanRegistry是它的默认实现类,它不仅支持SigletonBean的注册,也支持DisposableBean的注册管理用来清理要丢弃的bean以及他们依赖的资源。

FactoryBeanRegistrySupport主要是对FactoryBean的支持,获取FactoryBean、FactoryBean的类型,获取FactoryBean暴露的目标对象等。

  再是AbatractAutowireCapableBeanFacotry,实现AutowireCapableBeanFactory接口的bean装配功能,实现createBean autowireBean configBean()等方法。

DefaultListableBeanFactory继承AbatractAutowireCapableBeanFacotry功能的同时再实现了ConfigurableListableBeanFactory的功能,主要是实现了BeanDefinition的管理

2.

                     

以上是关于BeanFactory的主要内容,如果未能解决你的问题,请参考以下文章

2.1.1_BeanFactory是怎么加资源的

spring-beanFactory四

[刘阳Java]_了解BeanFactory_第4讲

BeanFactory父子容器的知识

spring入门——applicationContext与BeanFactory的区别

Spring的BeanFactory体系结构