主类的核心注解@SpringBootApplication
实质为三个注解:@SpringBootConfiguration<br /> @EnableAutoConfiguration<br /> @ComponentScan
@SpringBootConfiguration
实质为@Configuration
,指主类为一个配置类
@ComponentScan
注解扫描,默认是扫描当前类下的package
@EnableAutoConfiguration
实质为两个注解@AutoConfigurationPackage<br /> @Import({AutoConfigurationImportSelector.class})
@AutoConfigurationPackage
等同于@Import(AutoConfigurationPackages.Registrar.class)
,将Registrar注册为Bean
主类的所在包及其子包里边的组件扫描到Spring容器中。
@Import({AutoConfigurationImportSelector.class})
内部实际上就去加载META-INF/spring.factories文件的信息,然后筛选出以EnableAutoConfiguration为key的数据,加载到IOC容器中,实现自动配置功能!
每一个配置类里的又通过条件加载ConditionalOnBean等等注解,决定是否注册Bean