beanFactory、ApplicationContext和FactoryBean的区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了beanFactory、ApplicationContext和FactoryBean的区别相关的知识,希望对你有一定的参考价值。
参考技术A spring提供了 两种不同的IOC容器 ,为beanFactory和applicationContext,都是接口。
ApplicationContext 继承于BeanFactory 【ApplicationContext 继承ListableBeanFactory;他们都可以用来配置XML属性,已支持属性的自动注入,ListableBeanFactory继承BeanFactory 】
BeanFactory
BeanFactory是IOC容器的顶级接口,是IOC容器的最基础实现,也是访问spring容器的根接口,负责对bean的创建,访问等工作。实现类功能比较单一,BeanFactory接口实现的容器,特点是每次获取对象时才会创建对象。
ApplicationContext
继承了BeanFactory接口,拥有BeanFactory的全部功能,并且扩展了很多高级特性,每次容器启动时就会创建所有的对象。
BeanFactory :
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、ApplicationContext和FactoryBean的区别的主要内容,如果未能解决你的问题,请参考以下文章