此时问题就出现了,明明在代码工程中我们在xml中定义了Cluster实例,但是为什么启动的过程中SpringBoot在OnCondition判断的却找不不到该实例呢?接下来我们就从源码的层面分析下。
三、问题分析
======
1、原因分析
======
首先我们找到ConditionalOnBean的处理源码。其在OnBeanCondition的collectBeanNamesForType中。这里就是SpringBoot通过Cluster类型去查找对应的Bean实例的地方,如果找不到对应的Bean就不会实例化。通过debug咱们可以看到此时却是无法通过
beanFactory.getBeanNamesForType获取到Cluster的Bean实例。
然后咱们通过源码跟踪到具体获取代码地址:
DefaultListableBeanFactory.getBeanNamesForType
-> DefaultListableBeanFactory.doGetBeanNamesForType
-> AbstractBeanFactory.isTypeMatch
-> Abs