Spring boot 2 深入分析invokeBeanFactoryPostProcessors_父类


1.循环入参的beanFactoryPostProcessors,增加到bean注册的集合registryProcessors,或者regularPostProcessors


2.首先执行类型为PriorityOrdered的BeanDefinitionRegistryPostProcessor,优先执行:获取bean,增加到当前的注册bean集合


3.其次执行类型为Ordered的BeanDefinitionRegistryPostProcessor,也是获取bean,增加到当前的注册bean集合


4.最后循环执行类型不为PriorityOrdered,Ordered类型的BeanDefinitionRegistryPostProcessor,处理过程同上


5.执行父类方法,优先执行注册处理类


Spring boot 2 深入分析invokeBeanFactoryPostProcessors_内部类_02


开始自动装配

1.循环注册好的bean列表candidateNames,如果已经配置好了,就跳过去,汇总出需要配置的类列表

2.把这些需要配置的类进行排序

3.循环每个进行解析,调用parser.parse()


Spring boot 2 深入分析invokeBeanFactoryPostProcessors_内部类_03


4.循环每个需要解析的beanDefinitionHolder,根据注解bean,抽象bean或者其他bean,分别各自parse解析

Spring boot 2 深入分析invokeBeanFactoryPostProcessors_递归_04


6.处理内部类逻辑,由于传来的参数是我们的启动类,不含内部类,所以跳过。


7.然后对属性配置的解析


8.然后根据启动类 @ComponentScan 注解来扫描项目中的bean


9.递归解析。所有的bean,如果有注解,会进一步解析注解中包含的bean


10.这里又是一个递归解析,获取导入的配置类。很多情况下,导入的配置类中会同样包含导入类注解。


11.解析导入的 xml 配置类


12.处理 单独的 @Bean修饰的方法


13.处理接口中的默认方法


14.继续处理父类


15.递归执行后,没有父类了,就结束递归


Spring boot 2 深入分析invokeBeanFactoryPostProcessors_父类_05


继续深入看parse的逻辑

Spring boot 2 深入分析invokeBeanFactoryPostProcessors_父类_06


1.首先初始化 ClassPathBeanDefinitionScanner


2.设置beanNameGenerator


3.设置scopedProxyMode


4.设置resourcePattern


5.设置includeFilter和excludeFilter


6.检查是否是懒加载,如果是,beanDefinition设置懒加载为true


7.获取扫描的basePackages


8.根据获取的basePackages,进行扫描,获取包路径下的candidates


9.循环每个candidates,先解析scope元数据


10.然后生成beanName


Spring boot 2 深入分析invokeBeanFactoryPostProcessors_递归_07


1.解析出属性