spring boot启动自动配置解析

spring boot上的大体流程.
在这里插入图片描述
自动配置的解析入口在ConfigurationClassPostProcessor类的postProcessBeanDefinitionRegistry方法上.我们从这里来分析其具体的实现.
在这里插入图片描述
1.processConfigBeanDefinition首先来看这个函数的实现.
1).首先从defaultListableBeanFactory中拿到所有的已经注册的bean
2).然后对所有的bean进行检测,看其是不是满足条件的注解类.条件如下
Configuration.class
Component.class
ComponentScan.class
Import.class
ImportResource.class
看这个bean是不是包含上述注解.如果没有,则进行最后一个检测,检测这个类的所有成员方法是否有Bean.class的注解.
3)生成ConfigurationClassParser对象.开始对所有满足条件的Bean进行解析.
2.doProcessConfigurationClass
1)首先判断是不是一个Component.class注解类.如果是,则进行下面操作
<1>.判断这个类有没有内部类.如果没有over
<2>.如果有内部类,那么继续对内部类判断是不是满足1. 2)要求.如果满足.递归解析
2).判断类里面有没PropertySources.class的注解.如果有调用processPropertySource来处理它
3).判断类里面有没有ComponentScans.class的注解.如果有则进行解析.里面大体看了下,先查找bean,有的话就把注册到beanMap中.同时再继续对这个bean进行parse
4).判断是不是import.class注解.如果是,则读取其注解的value属性.然后再对数据进行处理.有三种情况1.这个类为ImportSelector.class子类.2.这个类为ImportBeanDefinitionRegistrar子类.3.以上两个都不是,则这个类递归上述调用.
5)判断是不是ImportResource.class注解,如果是获取属性值放到map中
6),检测Bean.class这个注解属性的Method.如果有.则加入到set中去
7).检测这个类是是否有interface.如果有继续检测这个interface里面是否有Bean.class的注解方法且不为abstract.如果有则加入到set中.
8)判断这个使用注解的类是不是有父类.如果有,把它父类拿过出按上面的方法整一遍

到这里就解析完了.要注意的是所有符合要求的注解类,都被包裹生成一个configurationClasses对象.所有的configurationClasses对象都被存储起来了.如图’在这里插入图片描述
我们上述解析过程生成的数据,要么直接注册到BeanMap里去了.要么被包存在对象中了.看ConfigurationClass最重要的几个成员变量.在这里插入图片描述
所以在解析完成之后,有个对所有的configuration总处理的地方看代码
在这里插入图片描述
这里就是这个loadBeanDefinitions这里是处理所有的解析生成数据的地.基本上是注册BeanMap的操作.

需要注意的是,上面的操作是针对已经存在的bean map进行处理的,如果不在bean map里面是不会处理的.那么符号条件的bean第一次是在什么时候被注册到bean map里面呢,这个处理是在ClassPathBeanDefinitionScanner.java类里面处理的.扫描指定的classpath下面所有满足条件的类并注册到bean map中去.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bruk_spp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值