springboot 核心注解
2021-12-11 13:56:19 6 举报
springboot 核心注解
作者其他创作
大纲/内容
实现了DeferredImportSelector接口
@Import({AutoConfigurationImportSelector.class})
@EnableAutoConfiguration
getConfigurationClassFilter() 获取一个配置过滤器,若无则新建一个
接口DeferredImportSelector extends 接口ImportSelector
@Import 注解提供了类似 @Bean 注解的功能
Start
1、若configurationClassFilter没有加载,则getAutoConfigurationImportFilters()2、然后依次 invokeAwareMethods; 装配bean3、配好之后赋给configurationClassFilter
@Component 组件标志
@AutoConfigurationPackage 自动配置包
@SpringBootConfiguration
核心方法
实现了selectImports方法
将选择的类导入到这个方法中,随后返回所有被加载的类名,然后装配@Override public String[] selectImports(AnnotationMetadata annotationMetadata) { if (!isEnabled(annotationMetadata)) { return NO_IMPORTS; } AutoConfigurationEntry autoConfigurationEntry = getAutoConfigurationEntry(annotationMetadata); return StringUtils.toStringArray(autoConfigurationEntry.getConfigurations()); }
.filter(configurations)来自另一个AutoConfigurationImportSelector.class的内部类ConfigurationClassFilter :配置类过滤器
1、configurations转成string数组 作为候选者数组2、通过函数式接口实现了match方法,用于比较自动配置的类名与当前候选类名并设置flag3、根据flag的情况重新加载一个List 并返回
1、扫描configurations注解以及属性,扫描exclusions 注解以及属性,并获取2、configurations自身去重3、exclusions自身去重4、configurations排除exclusions 5、configurations = getConfigurationClassFilter().filter(configurations);
protected AutoConfigurationEntry getAutoConfigurationEntry(AnnotationMetadata annotationMetadata)
@Configuration 这是一个Spring配置类标志
loadFactoryNames1、获取传入的类加载器,如果不存在则获取SpringFactoriesLoader的类加载器2、按照工厂类型的名字来加载loadSpringFactories加载过程:loadSpringFactories(ClassLoader classLoader) 1、ConcurrentReferenceHashMap中获取类加载器2、使用类加载器来加载\"META-INF/spring.factories\
AutoConfigurationImportSelector.class实现了内部类AutoConfigurationEntry
@Import(AutoConfigurationPackages.Registrar.class) 自动配置包注册器
加载
5、configurations = getConfigurationClassFilter().filter(configurations);
@SpringBootApplication
核心抽象方法 String[] selectImports(AnnotationMetadata importingClassMetadata);
0 条评论
下一页