一、SpringBoot 项目的启动类
@SpringBootApplication //标注这个类是一个Springboot的应用,启动类下的所有资源被导入
public class FirstSpringbootApplication {
public static void main(String[] args) {
//run方法将Springboot应用启动
SpringApplication.run(FirstSpringbootApplication.class, args);
}
}
注解:
@SpringBootApplication 里的两个注解
1. @SpringBootConfiguration : SpringBoot的配置
@Configuration : SpringBoot配置类
@Component : Spring组件
2. @EnableAutoConfiguration :自动配置
@AutoConfigurationPackage :自动配置包
@Import({AutoConfigurationPackages.Registrar.class}) : 导入选择器“包注册”
@Import({AutoConfigurationImportSelector.class}) : 自动配置导入选择
二、Springboot 项目的配置文件
1. 两种配置方式:
1)application.properties
语法结构:key = value
server.port = 8081
2)application.yml
语法结构:key: 空格 value
server:
port: 8081
配置文件的作用:修改Springboot自动配置的默认值,因为Springboot在底层都给我们配置好了。
三、yaml 语法
1)语法结构:key: 空格 value
2)yaml 存对象要 比properties 存对象更加简洁,properties只能保存键值对。
#yaml 存对象,对空格有要求
# 第一种写法:
student:
name: xiaoxiao
age: 14
#第二种 行内写法:
student:{name:xiaoxiao,age: 14}
# properties 存对象
student.name = xiaoxiao
student.age = 14
3)yaml 存数组
#第一种写法:
pets:
- cat
- dog
- pig
#第二种 行内写法
pets: [cat,dog,pig]
4)yaml 可以直接给实体类赋值
#不用 yaml 给实体类赋值的方式
public class Dog {
@Value("旺财") //用注解的这种方式来给value 赋值
private String name;
@Value("3")
private Integer age;
//用yml 给实体类赋值
//Person.java
@Component
@ConfigurationProperties(prefix = "person")
//@ConfigurationProperties 的作用:
// 将yml配置文件中配置的没一个属性,映射到这个组件中
// 告诉Springboot将本类中的所有属性和配置文件中相关的配置进行绑定
// 参数 prefix = "person" :将配置文件中person下面的所有属性一一对应
// 只有这个组件是容器中的组件,才能使用容器提供的ConfigurationProperties功能
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 Dog dog;
}
//application.yml
person:
name: xiaoxiao
age: 3
happy: yes
birth: 2023/08/02
maps: {k1: v1,k2: v2}
lists:
- code
- music
- girl
dog:
name: 旺财
age: 3
四、使用properties给实体类赋值
//Person.java
@PropertySource(value = "classpath:application.properties") //@PropertySource 用来加载指定的配置文件
public class Person {
@Value("${person.name}") //从配置文件中读
private String name;
@Value("#{11*2}") //#SPEL Spring表达式
private Integer age;
@Value("true") //字面量
private Boolean happy;
@Value("${person.birth}")
private Date birth;
}
//application.properties
person.name=xiaoxiao
person.birth=2023/08/09
五、功能对比图
- 松散绑定:比如yml中写的 last-name 和Java中写的 lastName 是一样的 ,- 后面跟着的字母默认是大写的。
- JSR303数据校验:这个就是我们可以在字段中增加一层过滤验证,可以保证数据的合法性。
- 复杂类型封装:yml中可以封装对象,使用@Value就不支持