Spring5

在以后的日子里,我尽量做到不管心情好与坏,都不要影响自己学习,让外界对自己造成的影响越低越好-我是一个没有温度的码农–题记
//------------->今天我主要说一下3个
1.Import
[email protected]
3.full和lite
1.>Spring是如何解析@Import的三种类型的呢 ,之前也说过3种Import的实例 现在我们从源码的角度剖析他
ConfigurationClassParser#processImports
主要在于这个方法
1.1> 如果是ImportSelector
1>获取class类 然后得到他的new 对象
2>调用selectImports()方法获取数组对象
3>processImports() //递归调用 再次判断有没有加入@import
=========
此时不会有@Import ,然后就是是一个普通类
4>cSpring5

此时就会调用这个方法 ,把我们的类放入configurationClasses 这个map中

但是如果实现了@ImportBeanDefinitionRegistrar 这个注解的执行流程
Spring5
是加入到addImportBeanDefinitionRegistrar 这个map中
==================================================================================>
我们的普通类(@Import)是在扫描之后完成的注册–>@Configuration
//-------首先我们一个配置类
@Componscanner
@Import( )
Appconfig(){}
1.> @ComponentScan(value = “com.xxx”)
ClassPathBeanDefinitionScanner#doScan
这个方法扫描之后就注册了
然后才会处理@Import类
------------------------------------》
处理Import分3种 1>@Import(MyService.class)
2>@Import(ImportSelector.class)
3>@Import(ImportBeanDefinitionRegistrar.class)
如果是第一种的话就直接
processConfigurationClass(candidate.asConfigClass(configClass));
然后放入 this.configurationClasses.put(configClass,configClass);

this.reader.loadBeanDefinitions(configClasses); 然后会调用这个方法来处理Import
Spring5
在这里处理的@Import 将他们加入到的map容器中
============================================

然后我们说下这个[email protected]
Spring5
此时我们加了@Configuration 这个注解,spring会给我们这个appconfig进行代理
org.springframework.context.annotation.ConfigurationClassPostProcessor#enhanceConfigurationClasses
在这个方法里面
Spring5
Spring会判断配置类是full还是liter 如果是full 的话就会加入到configBeanDefs这个map中
Spring5
主要是这里对appconfig进行了cglib动态代理
这个方法点进去
Spring5
在这里进行了cglib代理