简单描述BeanFactory与FactoryBean的区别

       前几天和一个大佬说到面试,说最近面试的很多人连BeanFactory和FactoryBean都分不清,我尴尬一笑,默不作声,赶紧回来复习一下。

       这两个都是接口,按字面上的意思,其实挺好区分的。BeanFactory是一个Factory ,FactoryBean是一个Bean。

  • BeanFactory

       按字面上的意思,它是一个Factory,当然这个Factory比较奇特,它相当于一个容器,管理着它内部的所有Bean,所以,你可以从它这边获取到它管理的那些Bean。它是 Spring的IOC容器的核心接口。

       注:大部分情况下我们不会直接使用BeanFactory,而是用它的子接口ApplicationContext,因为ApplicationContext作为BeanFactory的子接口,包含BeanFactory的所有功能,ApplicationContext一些实现还支持Spring的许多扩展,例如:支持AOP、提供国际化的消息访问、资源访问功能等。

  • FactoryBean

       按字面上的意思,它是一个Bean,是一个Factory的Bean,没别的意思,就是一个工厂Bean(设计模式中的工厂模式,有时候也有可能是装饰者模式),它用于产生某种Bean。

       注:FactoryBean在Spring中有70多种实现,它们隐藏了实例化一些复杂Bean的细节,给上层提供了便利。

 

       其实在Spring中,BeanFactory和FactoryBean可是有着紧密联系的。例如,根据Bean的ID使用BeanFactory获取一个Bean,其实是从FactoryBean的getObject()方法中获取的。如果你想获取一个FactoryBean,则需要在Bean的ID前面加一个&符号。

;