BeanFactory,FactoryBean和ObjectFactory的区别

1、BeanFactory是个工厂接口,作用根据配置信息创建SpringBean,获取bean等方法;
2、FatoryBean是某一个Bean的工厂接口,作用是创建某一个bean;
3、ObjectFactory是在单例解决循环依赖时先暴露的一个(单个)Bean的创建工厂,Bean创建成功后没有用处;

区别:一个创建一堆的Bean,一个创建一个Bean,提前暴露未创建完的Bean(属性,前置后置初始化方法都未执行,可以理解为只是执行了构造方法,提供了一个地址)。

1、既然已经存在BeanFactory,为什么还需要有FatoryBean;
原因:BeanFactory主要是针对普通bean的创建,当这个Bean太复杂的时候,创建的逻辑太多,配置太多时,如果把代码放在BeanFactory里面,代码就会写的非常复杂,耦合性太高,出错的概率太大,不利于扩展,比如AOP的Bean实现,逻辑就非常复杂,如果放到BeanFactory里面,虽然也可以实现,但代码可读性,复杂性就会太差,且不利于扩展,这时候提供一个接口去专门创建复杂的类是一个非常合适的方法;

2、Spring存在前置后置修改Bean,不是也可以实现很复杂的逻辑吗;
原因:前置后置都是针对所有Bean的,如果通过逻辑代码去判断某个Bean是否需要走某段逻辑,是否有点大材小用,且不利于理解,便利次数太多,降低初始化效率;前置后置的处理并不适合处理循环依赖,FatoryBean创建的Bean是会在Bean未填充属性之前就可以先查到的。

3、Bean存在初始化方法可以写复杂逻辑,且只是针对当前创建的Bean有效,为什么还需要FatoryBean;
原因:初始化方法是在Bean创建基本完成之后才执行的,有些属性可能在spring初始化之前就需要判断,不存在,直接抛异常,(猜的)

4、可以通过InitializingBean,InstantiationAwareBeanPostProcessor,Aware等等改变Bean行为…太多勾子,不知道什么时候用哪个?

结论:FatoryBean非常有存在的价值。

BeanFactoryFactoryBean 是 Spring 框架中的两个核心概念,它们的作用有所不同。 BeanFactory 是 Spring IoC 容器的根接口,它是 Spring 框架中最核心、最基础的接口。它的主要作用是管理 Spring 中的 Bean 对象,包括创建、销毁、获取、配置等操作。BeanFactory 是 Spring IoC 容器的基础,所有的容器都需要实现该接口,它提供了基本的 Bean 生命周期管理和依赖注入功能。 而 FactoryBean 接口是一个工厂类的接口,它的作用是创建和管理其它 Bean 对象。FactoryBean 接口的实现类可以看做是一个特殊的 Bean,它负责创建其它 Bean 对象。FactoryBean 的作用是将复杂的 Bean 对象的创建过程封装起来,对客户端屏蔽了具体的实现细节。通常情况下,我们会将 FactoryBean 实现类配置到 Spring 容器中,然后通过容器获取这个工厂类实例,再通过这个实例创建其它 Bean 对象。 因此,BeanFactoryFactoryBean 的主要区别在于: 1. BeanFactory 是 Spring IoC 容器的根接口,用于管理 Bean 对象;而 FactoryBean 是一个特殊的 Bean,用于创建和管理其它 Bean 对象。 2. BeanFactory 主要提供 Bean 生命周期管理和依赖注入功能;而 FactoryBean 主要提供对 Bean 创建过程的封装和控制。 3. 获取 BeanFactory 实例后,可以直接通过该实例获取 Bean 对象;而获取 FactoryBean 实例后,需要通过该实例的 getObject() 方法获取创建的 Bean 对象。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值