先说相同点

1、BeanFactory和FactoryBean都是接口

2、都是用来创建对象的

 

区别:

1、BeanFactory是spring bean容器的顶层接口(The root interface for accessing a Spring bean container),而FactoryBean其本质是工厂设计模式,是创建对象的工厂

2、使用BeanFactory的时候必须要遵循完整的创建过程,这个过程是由spring来管理控制的,而使用FactoryBean创建的对象不是FactoryBean本身,而是FactoryBean的getObject方法返回的对象,getObject方法实现是用户自定义的,因此更加灵活

3、BeanFactory提供了spring容器管理的诸多基本功能,如getBean、getType等方法声明,而FactoryBean不具备这些功能

3、实现了FactoryBean接口的bean,在通过BeanFactory的getBean方法获取时,实际上是调用了对应FactoryBean的getObject方法获取对象,如果想获取FactoryBean对象本身,则需在getBean的name上加上前缀 '&' 符号