为了账号安全,请及时绑定邮箱和手机立即绑定

FactoryBean与BeanFactory有什么却别?

FactoryBean与BeanFactory有什么却别?

收到一只叮咚 2019-03-21 18:15:47
Spring中有两种类型的Bean,一种是普通Bean,另一种是工厂Bean,即FactoryBean,这两种Bean都被容器管理,但工厂Bean跟普通Bean不同,其返回的对象不是指定类的一个实例,其返回的是该FactoryBean的getObject方法所返回的对象。那么,FactoryBean与BeanFactory有什么却别?
查看完整描述

4 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

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


查看完整回答
反对 回复 2019-04-22
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

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

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


查看完整回答
反对 回复 2019-04-22
?
12345678_0001

TA贡献1802条经验 获得超5个赞

一个是bean的factory,一个是bean


查看完整回答
反对 回复 2019-04-22
?
米脂

TA贡献1836条经验 获得超3个赞

BeanFactory是IOC容器,本身并不创建Bean,而是通过一系列组件的配合管理Bean。主要的方法是getBean,从容器中获取Bean的实例。
FactoryBean是创建Bean的工厂,它们都实现了FactoryBean接口,主要的方法是getObject,该方法返回的是FactoryBean想要创建的class的实例,而不是FactoryBean自己的实例。在Spring中有超过50+的FactoryBean。这些FactoryBean的作用是不同的。
之一是:通过FactoryBean创建指定class的实例,并是该实例得到能力的增强。例如:TransactionProxyFactoryBean就是让普通的Service具有了事务的能力。它的getObject返回的是普通的Service的实例,但是通过动态代理的方式对普通Service的实例进行了事务能力的增强。
之一是:某些Bean在特定场景下的实例化过程比较复杂,那么将这些实例化过程通过FactoryBean的方式进行封装,就能够快速的制造出该场景下的目标对象的实例。如:EhCacheFactoryBean。

所以一个最核心的功能是管理Bean的IOC容器,一个是某类Bean的生产工厂。所以更多的时候,我们理解ApplicationContext接口和FactoryBean接口的作用就很容易理解了。


查看完整回答
反对 回复 2019-04-22
  • 4 回答
  • 0 关注
  • 1325 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信