在springboot主程序类中,有一个很是重要的注释@SpringBootApplication,Springboot运行这个类下的main方法启动springboot应用,以下:java
按住键盘上Ctrl键,用鼠标点击这个注释,能够看到这个注释启用了三个注释功能:spring
1.@SpringBootConfiguration:容许在上下文中注册额外的bean或导入其余配置类express
2.@EnableAutoConfiguration
:启用Spring Boot的自动配置机制springboot
3.@ComponentScan:启用组件扫描功能测试
简单来讲,就是@SpringBootApplication是一个组合注解,至关于使用@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan三个注释与它们的默认属性,以下图:spa
@SpringBootConfiguration :SpringBoot配置类,与@Configuration注解做用同样,将当前类内声明的一个或多个以
3d
说明: @*Configuration表示xx配置类,点击@SpringBootConfiguration代码分析,以下图:调试
同时须要说明一下,配置类也是Spring容器中的一个组件,咱们能够按住键盘上的Ctrl键,用鼠标点@Configuration打开表明跟踪以下图:code
@EnableAutoConfiguration也是一个组注解,咱们按上述一样的方法打开代码跟踪。以下图所示:
blog
@AutoConfigurationPackage:包自动配置,跟踪代码发现就是由一个@import注释,以下图:
经过跟踪发现, @AutoConfigurationPackage注解使用的Spring底层注解@Import,给容器导入一个组件,导入的组件由AutoConfigurationPackages.Registrar类处理导入,按住键盘Ctrl键,用鼠标点击Registrar类名,能够看到以下图所示代码结构:
咱们在Registrar方法中的第129行处打下断点,对register方法进行跟踪调试,运行项目调试程序,以下图所示:
依次点击introspectedClass咱们能够看到@SpringBootApplication标注所在类为SpringApplicationStart,以下图所示:
为了测试获得导入的包名,咱们把new PackageImport(metadata).getPackageName()),复制到调试窗口中的Expressions标签页,点击Add new expression,在name中粘贴new PackageImport(metadata).getPackageName()),回车便可在Value中看到导入的包名com.goldCup.boot.main,以下图:
经过调试咱们能够知道:@AutoConfigurationPackage注释的做用就是将主配置类所在的包下面全部的组件都扫描到Spring容器中。
@EnableAutoConfiguration还有另外一个@Import注释,跟据字义,咱们能够理解为导入组件选择器自动配置,做用是将须要导入的组件以全类名的方式返回,这些组件将被添加到Spring容器中,如图:
自动配置类的做用,配置注入功能组件自动完成。
SpringBoot在启动的时候从自动配置类路径下的META-INF/spring.factorles中获取EnableAutoConfiguration指定的值,并将这些值做为自动配置类导入到容器中,自动配置类就生效,以下图: