BeanFactory 与 FactoryBean 的区别¶
一、BeanFactory¶
IoC 容器的顶层接口:
- 是个工厂,生产 Bean。
- ApplicationContext 是它的子接口。
二、FactoryBean¶
一个特殊的 Bean,用于自定义复杂 Bean 的创建:
public interface FactoryBean<T> {
T getObject() throws Exception;
Class<?> getObjectType();
boolean isSingleton();
}
三、区别¶
| BeanFactory | FactoryBean | |
|---|---|---|
| 角色 | 容器 | 一个 Bean |
| 作用 | 管理所有 Bean | 自定义某个 Bean 的创建 |
| 使用 | 接口,被实现 | 实现后注册成 Bean |
四、例子¶
@Component
public class MyFactoryBean implements FactoryBean<MyService> {
public MyService getObject() {
return new MyService(); // 复杂创建逻辑
}
public Class<?> getObjectType() { return MyService.class; }
}
使用:
五、& 前缀¶
要拿 FactoryBean 本身:
六、Spring 里的应用¶
- MyBatis 的 MapperFactoryBean。
- ProxyFactoryBean(AOP)。
- 各种集成框架。
一句话
BeanFactory 是工厂,FactoryBean 是工厂生产的 Bean 但它本身也是个工厂。