学 Spring 时,BeanFactory 和 FactoryBean 是最容易混淆的一组名词。一个是容器本身,一个是放在容器里的特殊工厂对象,只要先分清这一层,后面的源码和使用方式就顺了。
BeanFactory 是 Spring 容器的基础接口
它负责管理 Bean 的创建、查找和生命周期,是“容器怎么管对象”的问题。你可以把它理解成整个对象工厂体系的底座。
FactoryBean 是一个特殊的 Bean
它本身也会被 Spring 管理,但它的职责是帮你创建另外一种对象,常用于那些实例化过程复杂、需要自定义构建逻辑的场景。
最容易记的区别是“谁在管谁”
BeanFactory 管所有 Bean;FactoryBean 只是其中一个被管理的成员,只不过它额外承担了“生产对象”的职责。一个是容器角色,一个是普通对象角色。
获取结果时还要记住一个细节
从容器里按名称获取 FactoryBean 时,默认拿到的通常是它生产出来的对象;如果你想拿到 FactoryBean 自己,通常需要使用带前缀的方式显式区分。
结论
BeanFactory 是容器接口,FactoryBean 是容器里的特殊工厂 Bean。把它们理解成“管理者”和“生产者”的区别,基本就不会再混。
正文完




