简单了解BeanFactory和FactoryBean的区别
文章目录
- 引言
- BeanFactory是什么?
- FactoryBean是什么?
- FactoryBean的核心方法
- BeanFactory和FactoryBean的区别
- 总结
引言
在Spring框架中,BeanFactory 是Spring IoC容器的核心接口,负责Bean的基本管理和提供,而FactoryBean则是一种特殊的Bean,用于自定义创建其他对象。
BeanFactory是什么?
BeanFactory是Spring IoC容器的基础接口,它定义了 IoC 容器的基本功能,包括Bean的实例化、配置和管理。简单来说,BeanFactory就是一个工厂,它根据配置文件( XML)或注解来创建和管理 Bean实例。
FactoryBean是什么?
FactoryBean是一个接口,当一个类实现FactoryBean时,它本身就是一个Bean,但它的作用是作为一个工厂来创建其他对象。Spring容器不会直接返回FactoryBean实例本身,而是返回其 getObject()方法所创建的对象。FactoryBean自定义Bean的创建逻辑,特别是对于复杂对象, 通过实现 getObject()、getObjectType()`和 isSingleton()方法来控制返回的对象。
FactoryBean的核心方法
FactoryBean 接口定义了三个主要方法,这些是实现时必须重写的:
package org.springframework.beans.factory;import org.springframework.lang.Nullable;public interface FactoryBean<T> {String OBJECT_TYPE_ATTRIBUTE = "factoryBeanObjectType";// 返回FactoryBean所创建的实际对象实例@NullableT getObject() throws Exception;// 返回getObject()方法所创建对象的类型(Class)@NullableClass<?> getObjectType();// 返回true表示单例(默认),false表示原型default boolean isSingleton() {return true;}
}
FactoryBean不是普通的Bean,它更像是一个“Bean 工厂”,Spring容器会调用其getObject() 方法来获取实际的Bean实例。
BeanFactory和FactoryBean的区别
方面 | BeanFactory | FactoryBean |
---|---|---|
角色 | IoC容器的核心接口,管理所有Bean | 特殊的Bean接口,用于创建其他对象 |
功能 | 提供Bean的实例化和依赖注入 | 实现工厂模式,返回自定义对象 |
返回类型 | 通过getBean() 返回 Bean 实例 | 通过getObject() 返回实际对象 |
使用场景 | 为其实现类(ApplicationContext)提供基础功能 | 用于复杂Bean创建,如代理或资源管理 |
本质上,BeanFactory是管理Bean的容器,而 FactoryBean 是一个Bean ,用于产生另一个对象。
总结
BeanFactory是Spring IoC容器的核心抽象,定义了容器的访问规范;FactoryBean是Spring 提供的一个特殊接口,提供了复杂对象创建的工厂模式实现,主要用来创建其他Bean。
和普通Bean的区别是:
- 普通 Bean 的 getBean() 拿到的就是Bean本身,而FactoryBean的 getBean()实际上返回的是 etObject()方法生产的对象。
- 如果要拿工厂本身,用
&
beanName。
它常用于代理对象或复杂 Bean 的创建,比如 MyBatis 的 Mapper、Spring AOP 代理等。