@SpringBootApplication
是启动SpringBoot项目的关键注解。点击进入注解源码,可以看到关键的三行注解:@SpringBootConfiguration,@EnableAutoConfiguration和@ComponentScan
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
@SpringBootConfiguration
根据官方文档:
Indicates that a class provides Spring Boot application @Configuration
. Can be used as an alternative to the Spring’s standard @Configuration
annotation so that configuration can be found automatically (for example in tests).
@SpringBootConfiguration只是Spring标准*@Configuration*批注的替代方法。 两者之间的唯一区别是@SpringBootConfiguration允许自动找到配置。
@EnableAutoConfiguration
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
两行关键注解,开启了自动配置,同时会加载所有的配置文件。
@Import注解:
在原生的Spring框架中,组件装配经历了三个阶段:
- Spring2.5+,@Component装配Bean
- Spring3.0+,使用@Configuration+@Bean,项目启动后,@Bean注入到容器中
- Spring3.1+,@EnableXXX+@Import,模块装配注入容器
前两种虽然可用,但是如果有大量的Bean需要注入,将会很麻烦。第三种可以快速批量地装配组件。
@ComponentScan
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
顾名思义,就是用于扫描组件的注解。默认的是扫描启动文件下的所有包,同时排除了两种类型的类被加载入IOC容器。
- 和TypeExcludeFilter类或子类匹配的Bean。所以这里可以指定哪些Bean不会被加入容器。
- AutoConfiguration相关文件。因为在
@EnableAutoConfiguration
中已经把自动配置类加入了容器。