前言
:在查看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里面有没有一个专业的名词来解释?