spring装配是个大课题,能懂一点是一点吧。

关于代码链路,最后的方式就是倒序摸索,正序那么多逻辑,没有一百万也差不多少,所以就用倒序。

.(点号)和#井号是一个意思,下面代码可能不详细区分,复制出来是什么样就什么样。
但是有一说一,正规应该是点号,例如要去idea中找方法,点号就能找到,井号却找不到。

bean的扫描代码在哪里

还真摸出来了,如下:

org.springframework.boot.SpringApplication#run(java.lang.String...) # run方法
org.springframework.boot.SpringApplication#refreshContext() # 没错 就是在refresh方法里
org.springframework.boot.SpringApplication#refresh() # 一路点过去
org.springframework.context.support.AbstractApplicationContext#refresh() # 一路点过去
org.springframework.context.support.AbstractApplicationContext#invokeBeanFactoryPostProcessors() #

org.springframework.context.support.PostProcessorRegistrationDelegate#invokeBeanFactoryPostProcessors(org.springframework.beans.factory.config.ConfigurableListableBeanFactory, java.util.List<org.springframework.beans.factory.config.BeanFactoryPostProcessor>) # 没错 这是一个方法(参数有点多)

org.springframework.context.support.PostProcessorRegistrationDelegate#invokeBeanDefinitionRegistryPostProcessors()
org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions()
org.springframework.context.annotation.ComponentScanAnnotationParser#parse()
org.springframework.context.annotation.ClassPathBeanDefinitionScanner#doScan() # 这个类里面有扫描方法