SpringBoot —— 复习

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,就有对应的启动器了,有了启动器,我们自动装配就会生效,然后就配置成功了

上一篇:Spring解决循环依赖问题-三级缓存


下一篇:Spring Security过滤器链体系