ConfigurableListableBeanFactory和BeanDefinitionRegistry关系

本文探讨了Spring Boot中调用Refresh方法时涉及的BeanFactory处理流程。通过分析DefaultListableBeanFactory如何同时实现ConfigurableListableBeanFactory和BeanDefinitionRegistry接口,解释了框架内部对象类型判断的工作原理。
摘要由CSDN通过智能技术生成

前言

:在查看springBoot源码的过程中,遇到了这个问题,上网查了一些资料,理解了一些,这里顺便把这个问题给记录一下。

在springBoot调用Refresh方法里面 ,有一个叫invokeBeanFactoryPostProcessors的方法【图1】
在这里插入图片描述
在它里面会判断当前的beanFactory是否是BeanDefinitionRegistry的示例【图2】,这里的入参显示的是ConfigurableListableBeanFactory
在这里插入图片描述
查看两者的继承以及实现关系,发现两者并没有太大联系【图三、图4】,于是进行了资料查询。
在这里插入图片描述
在这里插入图片描述

结果:

实体类DefaultListableBeanFactory既实现了ConfigurableListableBeanFactory接口,也实现了BeanDefinitionRegistry接口,而我们从AnnotationConfigServletWebApplicationContext中调用obtainFreshBeanFactory方法【图5】,返回给我们的其实就是DefaultListableBeanFactory对象【图6】。只不过框架用它的父类ConfigurableListableBeanFactory接住了这个对象,导致我在后续判断实例的场景中 误以为传入的是ConfigurableListableBeanFactory,也就导致了问题的产生。
在这里插入图片描述
在这里插入图片描述

疑问:

一个对象ClassAB继承两个不同的接口FaceA、FaceB,调用instanceof(B b)方法判断b instanceof A ,当传入对象是ClassAB时,会返回结果true吗?

验证

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
经过一个简单的测试,发现返回结果为true,这也就验证了前面的猜想。

不过到最后还想问一下各位大佬,上面这种机制在java里面有没有一个专业的名词来解释?

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值