1. 定义
Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手
2.提供多套配置文件就可以定义多套不同环境配置
applcation.properties
application-dev.properties
application-test.properties
application-prod.properties
3 你如何理解 Spring Boot 中的 Starters?
Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成 Spring 及其他技术,而不需要到处找示例代码和依赖包。如你想使用 Spring JPA 访问数据库,只要加入 spring-boot-starter-data-jpa 启动器依赖就能使用了。
所有的第三方组件xxx-spring-boot-starter,都会在classpath:/META-INF 下都会有一个spring.factories 文件,spring 扫描 classpath:/META-INF下的spring.factories文件,读取类的配置文件,然后装载到Ioc容器中.比如druid连接池
官方包 spring-boot-starter-xxx,会在spring-boot-autoconfigure 下的:/META-INF目录下的spring.factories 记录所有的配置文件的。比如redis、aop、websocket。未导入的插件通过ConditionOnClass 进行剔除。
知到了配置文件的位置,怎么去扫描和处理呢?
@SpringBootApplication 复合annotation里的 @EnableAutoConfiguration 里的 @import(EnableAutoConfigurationImportSelector.class) ----> 从上面的@Import的类可以找到下面自动加载自动配置的映射。这个方法会加载类路径及所有jar包下META-INF/spring.factories配置中映射的自动配置的类。然后通过selectImports 方法返回一个包含配置类信息的数组。
我们可以自己模拟下扫描和注入的过程
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import(MyDefineImportSelector.class)
public @interface EnableConfiguration {
}
public class MyDefineImportSelector implements ImportSelector{
@Override
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
//动态导入bean, 告诉了Spring , 两个配置类在哪里
//TODO 在这里去加载所有的配置类就行?
// 通过某种机制去完成指定路径的配置类的扫描就行?
//package.class.classname
return new String[]{GpSqlSessionFactory.class.getName(), RedisConfiguration.class.getName()};
}
}
4.SPI机制:提供扩展接口,第三方自己去实现
JVM的扩展机制,比如Durid
满足以下条件:
- 需要在classpath目录下创建一个 META-INF/services
- 在该目录下创建一个 扩展点的全路径名.
- 文件中填写这个扩展点的实现文件编码格式UTF-8
- ServiceLoader去进行加载
5. Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?
启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:
@SpringBootConfiguration:组合了 @Configuration(定义一个Ioc容器配置类) 注解,实现配置文件的功能。
@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
复合annotation最重要 @import(EnableAutoConfigurationImportSelector.class) ----> 从上面的@Import的类可以找到下面自动加载自动配置的映射。这个方法会加载类路径及所有jar包下META-INF/spring.factories配置中映射的自动配置的类。
@ComponentScan:Spring组件或bean扫描
6.Spring Boot 核心配置文件
application 和 bootstrap 配置文件。
application 配置文件这个容易理解,主要用于 Spring Boot 项目的自动化配置。
bootstrap 配置文件有以下几个应用场景。
- 使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;
- 一些固定的不能被覆盖的属性;
- 一些加密/解密的场景;