跳转至

BeanFactory 与 FactoryBean 的区别

一、BeanFactory

IoC 容器的顶层接口:

public interface BeanFactory {
    Object getBean(String name);
    <T> T getBean(Class<T> requiredType);
}
  • 是个工厂,生产 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; }
}

使用:

@Autowired
MyService service;   // 注入的是 getObject() 返回的对象

五、& 前缀

要拿 FactoryBean 本身:

Object bean = beanFactory.getBean("&myFactoryBean");

六、Spring 里的应用

  • MyBatis 的 MapperFactoryBean。
  • ProxyFactoryBean(AOP)。
  • 各种集成框架。

一句话

BeanFactory 是工厂,FactoryBean 是工厂生产的 Bean 但它本身也是个工厂。