ObjectBean与BeanFactory之间的区别(小马哥视频笔记)
ObjectFactory 与 BeanFactory 均提供依赖查找的能力。
ObjectFactory 仅关注一个或一种类型的 Bean 依赖查找,自身不具备依赖查找的能力,能力由 BeanFactory 输出;BeanFactory 提供了单一类型、集合类型以及层次性等多种依赖查找的方式。
1、理解ObjectFactory关注一个Bean 的依赖查找
可以在ObjectFactoryCreatingFactoryBean的注释翻译中可以看出这个类是会实现返回ObjectFactory的值,并且它的具体来源是来源于BeanFactory
那么我们来看看代码,在这个ObjectFactoryCreatingFactoryBean类中我们看createInstance这个创造实例的方法,可以看到这个方法是先通过一个getBeanFactory()方法生成一个BeanFactory类,具体返回的是new TargetBeanObjectFactory()方法
这个new TargetBeanObjectFactory()其实就是new实例 TargetBeanObjectFactory的方法。将目标beanName和BeanFactory类作为参数传递进去完成实例化。当我们用ObjectFactory.getObject()方法时,其实就是调用的是TargetBeanObjectFactory类中getObject()方法,在该方法中具体的依赖查找还是通过 this.beanFactory.getBean(this.targetBeanName) 实现,所以我们才说ObjectFactory的依赖查找能力由 BeanFactory 输出。
2、理解ObjectFactory关注一种类型的 Bean 依赖查找
ObjectProvider继承了ObjectFactory 这个接口,也新增了自己的方法,相当于扩展了ObjectFactory 的功能。ObjectFactory一种类型的 Bean 依赖查找可以看做就是ObjectProvider的依赖查找。
我们可以再DefaultListableBeanFactory这个最终默认BeanFactory实现类中可以找到getBeanProvider()。
其中调用的resolveBean方法中可以看到和上面的方法相似,本质上都是通过BeanFactroy的方法实现依赖查找。先获取ObjectProvider类再调用getObjct()方法获取bean。
3、理解BeanFactory 提供了单一类型、集合类型以及层次性等多种依赖查找的方式。
我们再 回到DefaultListableBeanFactory方法可以看到它实现了ConfigurableListableBeanFactory接口
该ConfigurableListableBeanFactory接口又继承了 ListableBeanFactory, AutowireCapableBeanFactory, ConfigurableBeanFactory。其中ListableBeanFactory就是能够提供集合类型的依赖查找,再看ConfigurableBeanFactory接口继承了HierarchicalBeanFactory这个层次性的BeanFactory所以也就具备了层次的依赖查找
这些XXXXBeanFactory最终都是继承自BeanFactory,我们说的BeanFactory所具备的功能并不是单单指的是BeanFactory,而是这些多种多样的XXXXBeanFactory。所以可以看出BeanFactory 提供了单一类型、集合类型以及层次性等多种依赖查找的方式。
好好看代码,认真的生活!
- ApplicationContext与Beanfactory之间的区别
- 《Spring 3.x 企业应用开发实战》学习笔记 第三章 ApplicationContext和BeanFactory区别
- ApplicationContext的初始化和BeanFactory的初始化之间的区别
- spring中BeanFactory和FactoryBean的区别
- Spring5源码之ApplicationContext与BeanFactory的区别
- dynamic、object、var 之间的区别
- Spring视频学习笔记(3)Bean的作用域及自动装配
- BeanFactory和ApplicationContext联系和区别
- BeanFactory和FactoryBean的区别
- BeanFactory和ApplicationContext的区别
- Spring笔记之Bean继承与Java继承的区别
- Spring之BeanFactory与ApplicationContext区别
- BeanFactoryPostProcessor和BeanPostProcessor的区别
- OC视频笔记4、5、6(面向对象、过程区别)(类和对象)(类的定义和对象的创建)
- 【知识库】--spring 记录创建bean(单例)的ObjectFactory(240)
- 【3】BeanFactory 和AppliactionContext区别
- JndiObjectFactoryBean渊源
- Spring中ApplicationContext和beanfactory区别---解析一
- 创建ApplicationContext与BeanFactory时的区别-Spring源码学习之容器的基本实现
- 关于unicode和多字节之间的关系及区别(笔记)