BeanFactory接口:
IoC容器的顶级接口,是一个工厂类,使用了简单工厂模式,负责对bean的创建,访问等工作。有很多的实现,连Spring容器ApplicationContext都是它的具体实现,ApplicationContext在继承BeanFactory的基础上又继承了很多接口,进行了功能的增强。
常见使用场景:
- 从Ioc容器中获取Bean(byName or byType) getBean()
- 检索Ioc容器中是否包含指定的Bean containsBean()
- 判断Bean是否为单例 isSingleton()
所以BeanFactory主要就是用来创建和管理bean的。
FactoryBean接口:
首先它是一个Bean,是一个能够生产或者修饰对象的工厂Bean,通过实现该接口可以对bean进行一些额外的操作,是一种对于bean的增强,使用了装饰器模式和工厂模式。
该接口只有三个方法:
- 获取对象实例:getObject()
- 获取对象类型:getObjectType()
- 是否为单例模式:isSingleton() (该方法外默认方法,可以不实现)
总结:BeanFactory是个Factory,也就是IOC容器或对象工厂,FactoryBean是个Bean。在Spring中,所有的Bean都是由BeanFactory(也就是Spring容器)来进行管理的,但对于FactoryBean来说,它不是一个简单的Bean,而是一个能生产或修饰对象生成的工厂bean。