SpringBoot自动配置原理
SprigBoot自动配置原理
简要总结:
SpringBoot启动的时候会通过@EnableAutoConfiguration注解找到META-INF/spring.factories配置文件中的所有自动配置类,并对其进行加载,而这些自动配置类都是以AutoConfiguration结尾来命名的,它实际上就是一个JavaConfig形式的Spring容器配置类,它能通过以Properties结尾命名的类中取得在全局配置文件中配置的属性如:server.port,而XxxxProperties类是通过@ConfigurationProperties注解与全局配置文件中对应的属性进行绑定的。
自动配置流程
- @SpringBootApplication
-
@SpringBootConfiguration ---表明这是一个配置类
- @Configuration ---表明这是一个配置类
-
@EnableAutoConfiguration ---开启自动配置
-
@AtuoConfigurationPackages ---指示包含注释类的程序包应向AutoConfigurationPackages注册。
- @Import(AutoConfigurationPackages.Registrar.class) --->静态内部类,用于储存导入的基本包
-
@Import(AutoConfigurationImportSelector.class) 重点
selectImports(AnnotationMetadata annotationMetadata){ *** AutoConfigurationEntry autoConfigurationEntry = getAutoConfigurationEntry(autoConfigurationMetadata, annotationMetadata); *** } | | 调用 V protected AutoConfigurationEntry getAutoConfigurationEntry(AutoConfigurationMetadata autoConfigurationMetadata, AnnotationMetadata annotationMetadata) { *** List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes); *** } | | 调用 V protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) { *** List<String> configurations = SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader()); *** }
-
-
@ComponentScan --->扫描当前类所在包及其子包
-