@SpringBootApplication底层原理
1)SpringBoot重要特点:
-
约定大于配置
- maven 项目的配置文件存放在 resources 资源目录下。
2. maven 项目默认编译后的文件放于 target 目录。
3. maven 项目默认打包成 jar 格式。
4. 配置文件默认为 application.yml 或者 application.yaml 或者 application.properties
5. 默认通过配置文件 spring.profiles.active 来激活配置。
- maven 项目的配置文件存放在 resources 资源目录下。
-
自动装配
- springboot的自动装配实际上就是为了从spring.factories文件中获取到对应的需要进行自动装配的类,并生成相应的Bean对象,然后将它们交给spring容器来帮我们进行管理
2)@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) })
public @interface SpringBootApplication {
//omit..
}
-
由@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan三个注解叠加。
-
@ComponentScan – 包扫描注解,这个注解的作用是在项目启动时去扫描 启动类同级及以下的包中的Bean
-
@SpringBootConfiguration
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Configuration public @interface SpringBootConfiguration { }
- 完全是@Configuration注解,@Configuration是spring中的注解,表示该类是一个配置类,因此我们可以在启动类中做一些配置类可以做的事情,比如注入一个bean。
-
@EnableAutoConfiguration 注解,开启自动配置
@SuppressWarnings("deprecation") @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @AutoConfigurationPackage @Import(EnableAutoConfigurationImportSelector.class) public @interface EnableAutoConfiguration { //omit.. }
- @Import注解,快速导入Bean到IOC容器中,一般有三种方式,这里用的是ImportSelector