Spring源码解析之DefaultListableBeanFactory(转载)

原文出处:http://blog.csdn.net/z83986976/article/details/51599065

DefaultListableBeanFactory是bean加载的核心部分,是Spring注册及加载的默认实现。它的层次关系如下图 
DefaultListableBeanFactory

Spring中有两种类型的Bean,一种是普通Bean,另一种是工厂Bean,即FactoryBean,这两种Bean都被容器管理,但工厂Bean跟普通Bean不同,其返回的对象不是指定类的一个实例,其返回的是该FactoryBean的getObject方法所返回的对象。

BeanFactory

    解析、管理、实例化所有容器内的bean的接口,spring中所有解析配置文件的类都直接或者间接实现该接口。在解析配置文件时并不会初始化对象,只有在使用对象时(getBean())才会对该对象进行初始化。

它是Spring中Bean容器的顶级接口。里面有获取bean,判断是否包含bean,是否单例,获取别名等基本方法。spring ioc 容器核心接口 , 主要功能为根据 bean 的名称获取 bean 或 bean 的信息,提供的接口功能有:

查找是否有指定名称的 bean, 根据名称获取 bean, 根据名称获取所有的别名,根据名称获取 bean的 class 类型,根据名称判断 bean 是否是单例或 prototype  判断名称为 name 的 bean 是否与指定类型相匹配

ListableBeanFactory

根据条件获取Bean的配置清单。 如String[] getBeanDefinitionNames(),返回bean在工厂中定义的名称。 Bean在工厂中定义的次数。是否某个名称被定义在这个Bean中。继承自 BeanFactory ,提供对容器内的 bean 的枚举与遍历功能,主要功能有:查找是否有指定名称 bean 的定义 , 获取容器内 bean 的数量及所有 bean 的名称 , 根据指定类型获取 bean 的集合。

HierarchicalBeanFactory

继承自 BeanFactory ,支持父子 BeanFactory 的继承,主要功能有判断当前 BeanFactory 中是否含有指定名称的 bean 、获取父 BeanFactory 。BeanFactory getParentBeanFactory();//获取父类Bean Factory

SingletonBeanRegistry

定义对单例的注册及获取。

ConfigurableBeanFactory

提供了配置Bean的各种方法。

 继承自 HierarchicalBeanFactory 和 SingletonBeanRegistry 接口,为beanFactory 添加了一些配置的功能,包括添加 BeanPostProcessor 后置处理器、PropertyEditorRegistrar 属性编辑器、别名,设置父beanFactory 、类加载器缓存,并提供了对Scope 的支持,除此之外还有销毁 bean 和容器中所有单例,获取后置处理器数量,类型转换器,复制 ConfigurableBeanFactory  信息,判断指定的bean 当前是否正在创建等功能。同时,由于该接口继承自 SingletonBeanRegistry 接口,因此其也具有管理 beanFactory 中的单例对象的功能。

AutowireCapableBeanFactory

提供自动装配的功能。提供了创建Bean,自动注入Bean,初始化前后执行的方法。

ConfigurableListableBeanFactory

继承自ListableBeanFactory, AutowireCapableBeanFactory, ConfigurableBeanFactory 此三个接口,并定义了获取 BeanDefinition 和预先实例化单例 bean 的功能。提供分析和修改Bean的定义,指定忽略类型和接口等。

AliasRegistry

提供别名注册的接口,对别名的增删改查。

BeanDefinitionRegistry

将初始化完成的bean注册的容器中,针对单例来部分,缓存单例实例。针对beanDefinition部分,缓存bean描述。BeanDefinition的增删改查

SimpleAliasRegistry

主要是使用ConcurrentHashMap作为alias的缓存,并对接口AliasRegistry进行实现。

DefaultSingletonBeanRegistry

使用各种集合存储,对接口SingletonBeanRegistry进行实现

FactoryBeanRegistrySupport

增加了对FactoryBean的特殊处理

AbstractBeanFactory

对 BeanFactory 接口进行了基础性的实现,提供了ConfigurableBeanFactory 接口的所有功能。其功能和特点主要有:通过继承自 DefaultSingletonBeanRegistry 类,提供了对单例对象的 cache 缓存可以根据 bean 名称,决定对象是 prototype 还是单例类型 , Bean 别名的支持, Bean 定义 RootBeanDefinition 和 ChildBeanDefinition 的合并 , FactoryBean 创建 bean 与其本身的支持 , Bean 析构时调用 destroy() 方法或其本身配置的销毁方法进行后置处理 , 实现了HierarchicalBeanFactory 接口,支持 BeanFactory 容器的父子继承关系

本类给其子类留下了三个抽象方法:

boolean containsBeanDefinition(String beanName);

BeanDefinition getBeanDefinition(String beanName);

createBean(String beanName, RootBeanDefinition mbd, Object[] args);

额外提供ConfigurableBeanFactory的一些功能

AbstractAutowireCapableBeanFactory

主要对接口AutowireCapableBeanFactory进行实现

DefaultListableBeanFactory

对上面的一个综合类,

 
 
posted @ 2016-08-14 19:59  青青子衿J  阅读(693)  评论(0)    收藏  举报