spring boot–启动配置原理
一、@SpringBootApplication注解
- 我们新建一个项目的时候,会出现springboot应用的启动入口程序,如下所示:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
我们来对这个启动程序进行一下分析,首先来看一下@SpringBootApplication注解源码:
@Target({
ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {
@Filter(
type = FilterType.CUSTOM,
classes = {
TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {
AutoConfigurationExcludeFilter.class}
)}
)
我们会发现此注解主要包括了@SpringBootConfiguration@EnableAutoConfiguration,
@ComponentScan三个核心注解。分析如下:
- @SpringBootConfiguration注解说明了这是一个可以被组件扫描的配置类,和spring中@Configuration是类似的,如下源码可以发现,其实现也是基于@Configuration注解实现的,只不过是进行了注解封装;
@Target({
ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
- @EnableAutoConfiguration类也是一个组合注解,其主要包含了@AutoConfigurationPackage和@Import({AutoConfigurationImportSelector.class})两个核心注解,源码如下。
@Target({
ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({
AutoConfigurationImportSelector.class})
(1)@AutoConfigurationPackage的源码如下,其作用主要是向容器导入注册的所有组件,