SpringBoot自动装配原理
2021-10-29 11:38:07 0 举报
SpringBoot自动装配原理
作者其他创作
大纲/内容
@SpringBootApplication注解包含@EnableAutoConfiguration
@EnableAutoConfiguration下的@import注解(ImportSelector方式)AutoConfigurationImportSelector
实现了DeferredImportSelector接口
继承了继承了ImportSelector接口
该接口主要是为了导入@Configuration的配置项
延期导入@Configuration的配置项
方法selectImports
先判断是否进行自动装配
从META-INF/spring-autoconfigure-metadata.properties读取元数据与元数据的相关属性
调用getCandidateConfigurations方法
SpringFactoryiesLoader会读取META-INF/spring.factories下的EnableAutoConfiguration的配置,紧接着在进行排除与过滤,进而得到需要装配的类。最后让所有配置在META-INF/spring.factories下的AutoConfigurationImportListener执行AutoConfigurationImportEvent事件
@import注解的三种用法
①直接填class数组
语法:@Import({ 类名.class , 类名.class... })
②ImportSelector方式
实现ImportSelector接口,覆盖selectImports方法
方法返回值: 就是我们实际上要导入到容器中的组件全类名
public class Myclass implements ImportSelector {
@Override
public String[] selectImports(AnnotationMetadata annotationMetadata) {
return new String[]{"com.yc.Test.TestDemo3"};
}
}
@Override
public String[] selectImports(AnnotationMetadata annotationMetadata) {
return new String[]{"com.yc.Test.TestDemo3"};
}
}
③ImportBeanDefinitionRegistrar方式
和ImportSelector用法相似度80%
第一个参数annotationMetadata 和之前的ImportSelector参数一样都是表示当前被@Import注解给标注的所有注解信息
第二个参数表示用于注册定义一个bean
第二个参数表示用于注册定义一个bean
手动注册bean到容器
何时进行自动装配
AbstractApplicationContext的refresh方法
调用invokeBeanFactoryPostProcessors(beanFactory)处理BeanFactoryPostProcessor
ConfigurationClassPostProcessor 类
处理@Configuration注解
实现了BeanDefinitionRegistryPostProcessor,间接实现了BeanFactoryPostProcessor
解析每一个@ConfigurationClass的关键类是ConfigurationClassParser的parse方法
processDeferredImportSelectors方法,在这里将会对DeferredImportSelector进行处理
0 条评论
下一页