Spring源码解析(4一3)

// 现在主要讲这个方法,但是讲不完
在这里插入图片描述
我们这个方法干了什么事情
1.得到Spring内置的BeanFactoryPostProcessor,也就是ConfigurationClassPostProcessor,【因为我们没有实现接口】
然后遍历循环他这个接口的扩展方法
ConfigurationClassPostProcessor#postProcessBeanDefinitionRegistry
呢么这个方法又做了什么呢
我上面也讲了 吧bdmap中的bd拿出来,然后将@Configuration标记为full
将@Component,@ComponentScan,@Import @ImportResource标记为lite
然后添加到configCandidates这里面,很显然 这里面目前只有我们一个类就是appconfig,然后对对这个集合进行排序,比方说Springboot当中就有很多@Configuration

Set candidates = new LinkedHashSet<>(configCandidates);
然后把这个集合放入set当中是为了去重
在这里插入图片描述
就好比你在这里一直加 register(appconfig.class);
----------------------》然后进行包扫描啊在这里插入图片描述
继续这个类点击去
在这里插入图片描述
看看这个do while循环做了什么事情
对所有@Configuration配置的类进行解析
1.解析@PropertySource
在这里插入图片描述
我们这里没有@PropertySources这个注解 故而往下看,这个注解主要是为了导入配置文件的
2> 解析@ComponentScan 也就是我们 所说的包扫描
解析@ComponentScan有几个关键点

在这里插入图片描述
在这里插入图片描述
2.1> 第一他先new了一个scanner 我说了, 他刚开始在构造呢个scanner仅仅是程序员可以在外面调用的 真正的包扫描不是呢个 而是这个,又建立一个名字生成策略
2.2> ta在这里插入图片描述
他这里有个lazyInit属性可以设置全局变量 也就是你把这lazyInit=true 他将来生产出来的bean 的lazy就是true

在这里插入图片描述
然后他在这里添加一个比较规则
然后就是包扫描
在这里插入图片描述
这个方法点进来看下
在这里插入图片描述
也就是说Spring通过扫描出来的beanDefination叫做ScannedGenericBeanDefinition

然后我们跳出来
在这里插入图片描述
1.>包扫描拿出bd 也就是我们加了@Component的 比方说userdao
扫描出来的bd得要给他赋初始值,比方说scope ,name
2>在这里插入图片描述
这个点进来 Spring先给扫描出来的bd一套默认的属性
在这里插入图片描述
然后再看这个bd是不是被注解标注的
如果是被注解标注的 比方说

@Lazy(true)
User{
int age
}
在吧这个bd设置为注解标注的

在这里插入图片描述
然后再调用这个方法吧扫描的bd----------->put到map中
=================================================================================================这个方法主要是递归调用比如说UserDao是否夹杂着其他注解
在这里插入图片描述
然后就开始解析我们的@Import
在这里插入图片描述
我也说过Spring中解析3个Import怎么用
现在我们就来看看他底层原理吧
1> Class<?> candidateClass = candidate.loadClass(); //得到class对象
2>反射new对象
3>调用selectImports

在这里插入图片描述
1.执行方法获取到数组对象
2.再递归调用看看这个对象有没有标注Import

Spring是这个逻辑
1.解析MyImportSelector.class 得到数组对象,再解析UserService1。class
此时这个UserService1.class就是个普通类了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值