它是一个YMAL文件,用不用于配置,我不管
1. 基本语法
- 大小写敏感
- 使用缩进表示层级关系,k: v,使用空格分割k,v
- 缩进只允许使用空格,不允许使用Tab键
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
- # 表示注释,从这个字符一直到行尾,都会被解析器忽略
2、支持的写法
- 对象:键值对的集合,如:映射(map)/ 哈希(hash) / 字典(dictionary)
- 数组:一组按次序排列的值,如:序列(sequence) / 列表(list)
- 纯量:单个的、不可再分的值,如:字符串、数字、bool、日期
3、示例
@Component
@ConfigurationProperties(prefix = "person") //和配置文件person前缀的所有配置进行绑定
@Data //自动生成JavaBean属性的getter/setter
//@NoArgsConstructor //自动生成无参构造器
//@AllArgsConstructor //自动生成全参构造器
public class Person {
private String name;
private Integer age;
private Date birthDay;
private Boolean like;
private Child child; //嵌套对象
private List<Dog> dogs; //数组(里面是对象)
private Map<String,Cat> cats; //表示Map
}
@Data
public class Dog {
private String name;
private Integer age;
}
@Data
public class Child {
private String name;
private Integer age;
private Date birthDay;
private List<String> text; //数组
}
@Data
public class Cat {
private String name;
private Integer age;
}
这段代码表示没看明白,强制解度一番:
这个文件是一个使用Java语言编写的Spring Boot应用程序的配置类。
在Spring框架中,@Component
注解用来表示一个类是Spring容器的组件,这样Spring可以在应用上下文中自动发现并实例化它。@ConfigurationProperties
注解用于将类的属性与配置文件(如application.properties或application.yml)中的属性进行绑定。
@Data
注解是由Lombok库提供的,它会自动生成getter、setter、equals、canEqual、hashCode、toString等方法,简化了代码的编写。
文件中定义了四个类:Person
、Dog
、Child
和Cat
。每个类都使用了@Data
注解,因此它们都有自动生成的getter和setter方法。
PS:【度了就了解了一点,其实就是对所谓的驱动注解及其套路不明白,简单说就是不清楚那几个“@”究竟产生了什么作用,以及为什么这样写,或者叫这样写有什么作用(毕竟是强制速成的)。一个函数(方法)、类的基本用法还是了解的,表示也能上手写几段出来】
下面这段看起来就简单一些了,这是properties的写法。
person.name=张三
person.age=18
person.birthDay=2010/10/12 12:12:12
person.like=true
person.child.name=李四
person.child.age=12
person.child.birthDay=2018/10/12
person.child.text[0]=abc
person.child.text[1]=def
person.dogs[0].name=小黑
person.dogs[0].age=3
person.dogs[1].name=小白
person.dogs[1].age=2
person.cats.c1.name=小蓝
person.cats.c1.age=3
person.cats.c2.name=小灰
person.cats.c2.age=2
YAML的写法就更简单一些了,前缀没有了,同一 Node 下相同的缩进的发生,表示它们是相同层级,同属一个 Node(个人强行理解,不一定表述准确)。
person:
name: 张三
age: 18
birthDay: 2010/10/10 12:12:12
like: true
child:
name: 李四
age: 20
birthDay: 2018/10/10
text: ["abc","def"]
dogs:
- name: 小黑
age: 3
- name: 小白
age: 2
cats:
c1:
name: 小蓝
age: 3
c2: {name: 小绿,age: 2} #对象也可用{}表示
上面示例中的“- name”表示没理解(这是因为前面在讲支持的写法里,没有解释如何写一个数组),又强制度了一下:
“在YAML文件中,- name
这种格式通常表示一个数组的开始,其中-
表示一个新元素的开始,而name
是这个新元素的一个属性键。在上面的YAML示例中,- name
出现在dogs
属性下,这表示dogs
是一个数组,每个数组元素都是一个包含name
和age
属性的对象。”
4、细节
birthDay 推荐写为 birth-day
个人理解为:不推荐驼峰写法
文本:
单引号不会转义【\n 则为普通字符串显示】
双引号会转义【\n会显示为换行符】
大文本【大文本块】
|
开头,大文本写在下层,保留文本格式,换行符正确显示
>
开头,大文本写在下层,折叠换行符
【这里没有搞明白,亲自尝试了一下,发现结果都一样,还是没有弄明白。其实这个大文本的意思应该是大块文本折叠的意思,反正代码如下,不知道错在哪里,有路过的神仙请指点一二】
description00:
|
这是一个大文本块。
它会保留换行符和空格。
文本的格式和换行符都会
正确显示。
description01:
>
这是一个大文本块。
它会折叠连续的换行符,
但是保留单独的换行符。
文本的格式会进行调整,
以适应YAML文件的缩进。
description02: |
这是一个大文本块。
它会保留换行符和空格。
文本的格式和换行符都会
正确显示。
description03: >
这是一个大文本块。
它会折叠连续的换行符,
但是保留单独的换行符。
文本的格式会进行调整,
以适应YAML文件的缩进。
description04: |
这是一个大文本块。
它会保留换行符和空格。
文本的格式和换行符都会
正确显示。
name: zhangSanFeng
age: 18
description05: >
name: zhangSanFeng
age: 18
折叠后结果如下,不知是写错了是什么的,但可以肯定的是不同的编辑器解释是不一样的:
Idea
CodeArts
VS Code
5、小技巧
说:lombok 可简化 JavaBean 开发。自动生成构造器、getter/setter、Builder 模式等。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>compile</scope>
</dependency>
反正 Builder 模式暂时没弄清楚,但是自动生成构造器、getter/setter 方法这些貌似通常的编辑器都可以做到了,再加上有通义灵码或华为或微软的加持,这个依赖貌似可以不用有。