文章目录
一.Springboot介绍
SpringBoot对Spring的缺点进行的改善和优化,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度上缩短了项目周期。
二.Springboot特点
1.pom.xml
- spring-boot-dependencies:核心在父工程中
- 依赖中不需要版本,是因为有这些版本仓库
2.启动器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
- 启动器:Springboot的启动场景;
- spring-boot-starter-web:自动导入web环境所有的依赖;
- springboot将所有的功能场景,都转变为启动器
- 使用什么功能,只需要找到对应的启动器就可以了
3.主程序
@SpringBootApplication//标注这是一个springboot应用
public class SpringbootApplication {
//将springboot应用启动
public static void main(String[] args) {
SpringApplication.run(SpringbootApplication.class, args);
}
}
包含的注解:
-
@SpringBootConfiguration:springboot的配置
@Configuration:Spring配置类
@Component:spring组件
-
@EnableAutoConfigurantion:自动配置
@Import({AutoConfigurationImportSelector.class}):自动配置,包注册
4.小结:
- springboot在启动时,从类路径/META-INF/spring.factories获取指定的值。
- 将这些自动配置的类导入容器,自动配置的类就会生效
- 以前需要自动配置的东西,springboot已经配好了
- 把所有需要导入的组件,以类名的方式返回,这些组件就会被添加到容器中。
- 容器中也会存在非常多的XXXAutoConfiguration的文件,就是这个类导入了场景需要的所有组件,并自动配置。
- 有了自动配置类,免去了我们手动编写配置文件的工作。
三.yaml介绍
1.简介
yaml是一种可读性高,以数据做为中心,用来表达数据序列化的格式。
2.格式
- 普通的key-value格式
name: mingiao
- 对象的定义
#对象
student:
name: mingiao
age: 21
#行内写法
student1: {name: mingiao1,age: 22}
- 数组的定义
#数组
pets:
- cat
- dog
- pig
#行内写法
pets1: [cat,dog,pig]
注意:yaml对空格和缩进的要求很高!
3.松散绑定
比如yaml中有一个字段写的是last-name,这个和lastName是一样的,后面默认的字母是大写的,这就是松散绑定。
4.复杂类型封装
yaml可以封装对象,使用@Value就不支持
四.属性注入
1.@value
@Value("hh")
private String name;
@Value("3")
private Integer age;
2.yaml注入
application.yaml
person:
name: mingiao
age: 3
happy: true
birth: 2020/3/4
maps: {s1: m1,s2: m2}
lists:
- computer game
- music
- girl
cat:
name: kitty
age: 2
person.java
@Component
@ConfigurationProperties(prefix = "person")
public class person {
private String name;
private Integer age;
private Boolean happy;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Cat cat;
<!--getter and setter...-->
}
- @ConfigurationProperties(prefix = “xxx”):将配置文件中配置的每一个值,映射到组件中;
- 参数prefix=“xxx”:将配置文件中的xxx下面的所有属性一一对应;
- 如果yaml和properties文件同时存在,优先注入properties中的属性
3.propoties注入
application.propoties
name=mingiao
age=3
person.java
@PropertySource(value = "classpath:application.properties")
public class person {
@Value("${name}")
private String name;
@Value("${age}")
private Integer age;
<!-- getter and setter...-->
}
-
@PropertySource(value = “classpath:xxx.properties”):将xxx.properties中的属性映射到组件中;
-
@Value("${xxx}"):指定映射的属性
4.@ConfigurationProperties注入和@Value注入的区别
五.多环境配置以及文件的位置
1.配置文件的位置及优先级
- 项目路径下file:./config/
- 项目路径下file:./
- resource 路径下classpath:/config/
- resource路径下classpath:/
-----从上到下,优先级由高到低-----
2.多环境配置
当有多个配置时(都是application-xxx.properties或yaml的形式),可以在application.properties或yaml中选择配置
- properties
spring.profiles.active=dec//配置文件的后缀(xxx)
- yaml
server:
port: 8084
spring:
profiles:
active: dec
六.自动装配的原理
1.SpringBoot启动会加载大量的自动配置类
2.我们看我们需要的功能有没有在springBoot默认写好的自动配置类中。
3.自动配置类中如果有我们需要的组件,就不需要手动配置了。
4.给容器中自动配置类添加组件时,会从properties中获取某些属性,我们给这些属性赋值即可。
- xxxAutoConfigurartion:自动配置类,给容器中添加组件。
- xxxProperties:封装配置文件中相关属性