5.自动配置生效
每一个XxxxAutoConfiguration自动配置类都是在某些条件之下才会生效的,这些条件的限制在Spring Boot中以注解的形式体现,常见的条件注解有如下几项:
@ConditionalOnBean:当容器里有指定的bean的条件下。 @ConditionalOnMissingBean:当容器里不存在指定bean的条件下。 @ConditionalOnClass:当类路径下有指定类的条件下。 @ConditionalOnMissingClass:当类路径下不存在指定类的条件下。 @ConditionalOnProperty:指定的属性是否有指定的值,比如@ConditionalOnProperties(prefix=”xxx.xxx”, value=”enable”, matchIfMissing=true),代表当xxx.xxx为enable时条件的布尔值为true,如果没有设置的情况下也为true。
6.列子
以ServletWebServerFactoryAutoConfiguration配置类为例,解释一下全局配置文件中的属性如何生效,比如:server.port=8081,是如何生效的(当然不配置也会有默认值,这个默认值来自于org.apache.catalina.startup.Tomcat)。
在ServletWebServerFactoryAutoConfiguration类上,有一个@EnableConfigurationProperties注解:开启配置属性,而它后面的参数是一个ServerProperties类,这就是约定大于配置的最终落地点。
7.结论
1.SpringBoot所有自动配置都是在启动的时候扫描并加载
: spring.factories
所有的自动装配都在这里面,但是不一定生效,要判断条件是否成立,只要导入对应的start,就有对应的启动器了,有了启动器,我们自动装配就会生效,然后就配置成功。
2.springBoot在启动的时候,从类路径下/META-INF/spring.factories
获取指定的值。
3.将这些自动配置的类导入容器,自动配置就会生效,帮我们进行自动装配
4.整合javaSE,解决方案和自动配置的东西都在spring-boot-a下
5.以前我们需要自动配置的东西,现在SpringBoot帮我们做了
6.他会把所有需要导入的组件,以类名的方式返回,这些组件就会被添加到容器
7.容器中也会存在非常多的xxxAppliconfigation的文件,这些文件就会导入对应的组件;并且自动配置
8.有了自动配置类,我们就免去了手动装配文件
。
SpringApplication.run分析
分析该方法主要分两部分,一部分是SpringApplication的实例化,二是run方法的执行;
SpringApplication
这个类主要做了以下四件事情:
1、推断应用的类型是普通的项目还是Web项目
2、查找并加载所有可用初始化器 , 设置到initializers属性中
3、找出所有的应用程序监听器,设置到listeners属性中
4、推断并设置main方法的定义类,找到运行的主类
查看构造器:
public SpringApplication(ResourceLoader resourceLoader, Class... primarySources) { // ...... this.webApplicationType = WebApplicationType.deduceFromClasspath(); this.setInitializers(this.getSpringFactoriesInstances(); this.setListeners(this.getSpringFactoriesInstances(ApplicationListener.class)); this.mainApplicationClass = this.deduceMainApplicationClass(); }
关于springboot,谈谈你的理解:
springboot的自动装配
run():
①判断当前项目是普通项目还是web项目
②推断并设置main方法的定义类,找到运行的主类
③run方法里面有一些监听器,这些监听器是全局存在的,它的作用是获取上下文处理一些bean,所有的bean无论是加载还是生产初始化多存在。
(八)、多环境配置即配置文件位置
1.application配置的位置
优先级1:项目路径下的config文件夹配置文件 优先级2:项目路径下配置文件 优先级3:资源路径下的config文件夹配置文件 优先级4:资源路径下配置文件
优先级由高到底,高优先级的配置会覆盖低优先级的配置;
SpringBoot会从这四个位置全部加载主配置文件;互补配置;
我们在最低级的配置文件中设置一个项目访问路径的配置来测试互补问题;
2.propertiesd的多环境的切换
我们在文档中设置的有三个环境,第一个是: 默认环境(application.properties)。第二个是: 测试环境(application-test.properties)。 第三个是: 开发环境(application-dev.properties)
假如说我们要进行切换环境的话,我们可以设置如下的代码
spring.profiles.active='走的环境'
# 默认环境下是8080 server.port=8080 #springboot的多环境配置,可以选择激活哪一个配置文件 #spring.profiles.active=dev 这样是走开发环境 spring.profiles.active=test
3.yaml的多文档块
yaml文档之间的分割时 - - -
三个连续的杠。相当于properties的文档,但是不需要创建文件,我们只需要划三个杠。
指定开启dev这个端口号
spring: profiles: active: dev
# 端口号1 server: port: 8081 --- #端口号2 server: port: 8082 spring: profiles: active: dev --- #端口号3 server: port: 8083 spring: profiles: test
(九)、自动装配的在理解
1.基本点击步骤