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非常有存在的价值。

猜你喜欢

转载自blog.csdn.net/xionglangs/article/details/118487175