主程序类(主入口类)—— @SpringBootApplication注解
@SpringBootApplication:Spring Boot应用标注在某个类上的说明这个类是Spring Boot的著配置类,Spring Boot会运行这个类的main方法来执行Spring Boot程序
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes ={TypeExcludeFilter.class}),
@Filter(type = FilterType.CUSTOM, classes = {AutoConfigurationExcludeFilter.class})
})
public @interface SpringBootApplication {
@SpringBootApplication注解主要由以下注解组成:
-
@SpringBootConfiguration:实际就是一个@Configuration的别名配置注解,表示这是一个Spring Boot配置类
@Configuration public @interface SpringBootConfiguration {
@Configuration底层就是一个@Component注解的@interface,其实就是一个组件
@Component public @interface Configuration {
-
@EnableAutoConfiguration:启动Spring Boot的自动配置
@AutoConfigurationPackage @Import({AutoConfigurationImportSelector.class}) public @interface EnableAutoConfiguration {
-
@AutoConfigurationPackage:自动配置包,实际就是一个@Import注解的@interface,@Import表示为容器注入一些组件
@Import({Registrar.class}) public @interface AutoConfigurationPackage {
Registrar类会将主配置类(即@SpringBootApplication标注的类)所在的包及其子包里的所有组件全部扫描到Spring容器中
-
@Import(EnableAutoConfigurationImportSelector.class):为容器注入一些组件
EnableAutoConfigurationImportSelector是一个告诉Spring应该导入哪些组件的选择器,将需要的组件以全类名的方式返回,然后这些组件就会被添加到容器中。其实最终就是添加一系列的自动配置类,形如xxxxAutoConfiguration,这些自动配置类会自动导入所用场景的组件和配置
Spring Boot在启动时会从类路径下的MATE-INF/spring.factories中获取EnableAutoConfiguration中指定的值,将这些值导入到容器中,自动配置类就生效了,Spring Boot就会自动帮我们完成配置
-
-
@ComponentScan:组件扫描