FactoryBean与BeanFactory有什么却别?

Spring中有两种类型的Bean,一种是普通Bean,另一种是工厂Bean,即FactoryBean,这两种Bean都被容器管理,但工厂Bean跟普通Bean不同,其返回的对象不是指定类的一个实例,其返回的是该FactoryBean的getObject方法所返回的对象。
那么,FactoryBean与BeanFactory有什么却别?

阅读 6.1k
4 个回答

BeanFactory是个 Factory ,也就是对象工厂, FactoryBean 是个 Bean 。

BeanFactory:实现这个接口的对象它们可以作为它们自己的工厂(这个根接口,用来访问spring容器),其实spring可以成为容器很大一部分是依赖这个接口

FactoryBean:如果某个对象实现了这个接口,这个对象会被当做一个工厂(为了让某个对象暴露),而不是直接以一个对象暴露自己。
以上为英文渣翻译。
说说我的理解:
之前没有研究过这两个对象的区别,刚刚看了一下源码的翻译和一些类的实现,发现挺有意思的。
首先BeanFactory,需要知道对象的一系列属性(通过XML配置),然后再构造对象,并对对象进行管理,如对象的生命周期,是否单例,以及复合对象(对象有其他对象的引用)的组装(自动装配),对象初始化的一些准备工作,属性注入等等,能说一堆。可以说BeanFactory更像一个公司,而不像是FactoryBean,这个对象更像一个工厂,是专门生产某一类对象,几乎没有管理功能,只是单一的构造对象而已。

一个是bean的factory,一个是bean

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题