SpringBoot复习
1.微服务架构思想
把每个功能元素独立出来,把独立出来的功能元素动态组合,需要的功能元素才去拿来组合,需要多一些时间可以整合多个功能元素,所以微服务架构是对功能元素进行复制,而没有对整个应用进行复制
好处是:
- 节省了调用资源
- 每个功能元素的服务都是一个可替换的、可独立升级的软件代码
2.自动配置原理
- pom.xml
spring-boot-dependencies
核心依赖在父工程中 - 启动器:就是SpringBoot的启动场景,比如
spring-boot-starter-web
,他就会帮我们自动导入web环境所有的依赖,SpringBoot会将所有的功能场景变成一个个的启动器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
- 主程序:
@SpringBootApplication //标注这个类是一个SpringBoot应用,是主要注解
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
点进去后可以发现有两个核心注解
@SpringBootConfiguration //SpringBoot的配置.
@Configuration //Spring配置类
@Component //说明这也是一个Spring组件
@EnableAutoConfiguration //自动导入配置
@AutoConfigurationPackage //自动配置包
@Import({Registrar.class}) //自动配置包 包注册
@Import({AutoConfigurationImportSelector.class}) //自动配置导入选择
@Import({AutoConfigurationImportSelector.class})
中有一个
//获取所有的配置
List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);
//获取候选的配置
protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.");
return configurations;
}
META-INF/spring.factories 自动配置的核心文件
结论:SpringBoot所有自动配置都是在启动的时候扫描并加载:spring.factories
所有的自动配置类都在这里面,但是不一定生效,要判断条件是否成立,只要导入了对应的start,就有对应的启动器了,有了启动器,我们自动装配就会生效,然后就配置成功了