FactoryBean与BeanFactory有什么却别?

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

收到一只叮咚
浏览 1326回答 4
4回答

慕村9548890

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

拉风的咖菲猫

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

12345678_0001

一个是bean的factory,一个是bean

米脂

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接口的作用就很容易理解了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java