您的位置:首页 > 移动开发 > Objective-C

ObjectBean与BeanFactory之间的区别(小马哥视频笔记)

2020-08-03 09:43 766 查看

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 提供了单一类型、集合类型以及层次性等多种依赖查找的方式。

 

好好看代码,认真的生活!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: