BeanFactory
和 FactoryBean
是两个不同的概念,它们在 Spring 的 IoC(Inversion of Control,控制反转)容器中扮演着不同的角色。
BeanFactory
BeanFactory
是 Spring 框架中 IoC 容器的核心接口,它负责管理和配置应用程序中的 Bean。BeanFactory
提供了基本的 Bean 管理功能,包括 Bean 的实例化、配置和依赖注入。
主要作用:
-
实例化 Bean:
BeanFactory
负责根据配置文件或注解实例化 Bean。 -
依赖注入:
BeanFactory
负责解析 Bean 之间的依赖关系,并将依赖的 Bean 注入到目标 Bean 中。 -
生命周期管理:
BeanFactory
管理 Bean 的生命周期,包括初始化和销毁。
常见实现类:
-
DefaultListableBeanFactory
:这是BeanFactory
的一个常见实现类,提供了完整的 Bean 管理功能。 -
XmlBeanFactory
:这是BeanFactory
的一个旧实现类,用于从 XML 配置文件中加载 Bean 定义。
BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
MyBean myBean = (MyBean) beanFactory.getBean("myBean");
FactoryBean
FactoryBean
是一个特殊的 Bean,它本身是一个工厂,用于创建其他 Bean 实例。FactoryBean
接口允许你自定义 Bean 的创建逻辑,而不是使用默认的实例化方式。
主要作用:
-
自定义 Bean 创建逻辑:
FactoryBean
允许你通过实现getObject()
方法来定义 Bean 的创建逻辑。 -
延迟初始化:
FactoryBean
可以实现延迟初始化,只有在需要时才创建 Bean。 -
复杂 Bean 创建:
FactoryBean
适用于创建复杂的 Bean,例如需要依赖外部资源或需要复杂初始化逻辑的 Bean。
主要方法:
-
getObject()
:返回由FactoryBean
创建的 Bean 实例。 -
getObjectType()
:返回由FactoryBean
创建的 Bean 的类型。 -
isSingleton()
:指示FactoryBean
创建的 Bean 是否是单例。
public class DemoFactoryBean implements FactoryBean<DemoBean> {
@Override
public DemoBean getObject() throws Exception {
// 自定义创建逻辑
return new DemoBean();
}
@Override
public Class<?> getObjectType() {
return DemoBean.class;
}
@Override
public boolean isSingleton() {
return true;
}
}
区别和作用总结
特性 | BeanFactory | FactoryBean |
---|---|---|
角色 | Spring IoC 容器的核心接口,负责管理和配置 Bean | 特殊的 Bean,用于创建其他 Bean |
作用 | 实例化、配置和依赖注入 Bean | 自定义 Bean 的创建逻辑 |
主要方法 | getBean() 、containsBean() 、isSingleton() 等 | getObject() 、getObjectType() 、isSingleton() |
常见实现类 | DefaultListableBeanFactory 、XmlBeanFactory | 自定义实现类 |
使用场景 | 管理和配置应用程序中的 Bean | 创建复杂的 Bean,需要自定义创建逻辑 |