BeanFactory 和 FactoryBean 的区别
BeanFactory和FactoryBean的区别
7.5.1 BeanFactory
Spring IoC容器的顶级对象,BeanFactory被翻译为“Bean工厂”,在Spring的IoC容器中,“Bean工厂”负责创建Bean对象。
BeanFactory是工厂。
7.5.2 FactoryBean
FactoryBean:它是一个Bean,是一个能够辅助Spring实例化其它Bean对象的一个Bean。
在Spring中,Bean可以分为两类:
第一类:普通Bean
第二类:工厂Bean(记住:工厂Bean也是一种Bean,只不过这种Bean比较特殊,它可以辅助Spring实例化其它Bean对象。)
BeanFactory 和 FactoryBean 的区别
BeanFactory
和 FactoryBean
是 Spring 框架中两个重要但完全不同的接口,它们的名称相似但功能完全不同。
1. BeanFactory (Bean 工厂)
角色:Spring 容器的根接口,是 IoC 容器的基础实现
功能:
- 负责管理 Bean 的创建、配置和生命周期
- 是 Spring 的核心容器接口
- 提供基本的依赖注入功能
- 默认实现是
DefaultListableBeanFactory
特点:
- 是 Spring 容器本身
- 延迟加载 Bean(默认情况下)
- 提供基本的容器功能
使用示例:
BeanFactory factory = new XmlBeanFactory(new ClassPathResource("beans.xml"));
MyBean bean = factory.getBean(MyBean.class);
2. FactoryBean (工厂 Bean)
角色:特殊的 Bean,用于创建其他 Bean 的工厂
功能:
- 是一个能生产或修饰对象生成的工厂 Bean
- 实现该接口的类可以自定义 Bean 的创建逻辑
- 常用于集成第三方框架或复杂对象的创建
特点:
- 是一个被 Spring 管理的 Bean
- 本身也是一个工厂
- 通常用于创建复杂的、需要特殊初始化的对象
使用示例:
public class MyFactoryBean implements FactoryBean<MyComplexObject> {@Overridepublic MyComplexObject getObject() throws Exception {// 复杂的创建逻辑return new MyComplexObject();}@Overridepublic Class<?> getObjectType() {return MyComplexObject.class;}@Overridepublic boolean isSingleton() {return true;}
}
主要区别
特性 | BeanFactory | FactoryBean |
---|---|---|
角色 | Spring 容器本身 | 一个特殊的 Bean |
功能 | 管理所有 Bean 的生命周期 | 负责创建特定的 Bean |
使用场景 | 整个 Spring 应用的基础容器 | 需要自定义复杂对象的创建逻辑时使用 |
实现方式 | Spring 框架提供的核心接口 | 开发者可以实现的接口 |
获取方式 | 应用的基础容器 | 通过容器获取其生产的对象 |
关键记忆点
- BeanFactory 是"工厂的工厂",是整个 Spring 容器
- FactoryBean 是"工厂的 Bean",是能够生产其他 Bean 的特殊 Bean
- 当你想获取 FactoryBean 本身而非它生产的对象时,需要在 bean name 前加
&
符号
// 获取 FactoryBean 生产的对象
MyComplexObject obj = context.getBean("myFactoryBean");// 获取 FactoryBean 本身
FactoryBean<?> factory = context.getBean("&myFactoryBean");