SpringBoot 主入口内注解解读
1.@SpringBootApplication主要组成
- 1.@SpringBootConfiguration
- 2.@EnableAutoConfiguration
1.1@SpringBootConfiguration
其实就是spring中的@Configuration,标注的类为配置类。配置类也是容器中的一个组件;@Component
1.2@EnableAutoConfiguration
1.开启自动配置功能
@AutoConfigurationPackage
@Import(EnableAutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
2.@AutoConfigurationPackage:
@Import(AutoConfigurationPackages.Registrar.class)
public @interface AutoConfigurationPackage {
@Override
public void registerBeanDefinitions(AnnotationMetadata metadata,
BeanDefinitionRegistry registry) {
register(registry, new PackageImport(metadata).getPackageName());
}
将主配置类(@SpringBootApplication标注的类)的所在包及所有子包里面的所有组件扫描到Spring容器.注册BeanDefinition。
3.@Import(EnableAutoConfigurationImportSelector.class)
AutoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader
.loadMetadata(this.beanClassLoader);
AnnotationAttributes attributes = getAttributes(annotationMetadata);
List<String> configurations = getCandidateConfigurations(annotationMetadata,
attributes);
通过AutoConfigurationImportSelector 类,导入自动配置类。
Spring Boot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作;以前我们需要自己配置的东西,自动配置类都帮我们;
2.自动配置原理
SpringBoot启动后,已经将自动配置配导入到容器中,然后通过@Conditional***调节注解,判断该自动配置类是否生效,结合@EnableConfigurationProperties将配置文件中的配置信息和对应类属性绑定,完成自动配置。