Spring Boot 学习(8)——YAML文件

       它是一个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等方法,简化了代码的编写。
        文件中定义了四个类:PersonDogChildCat。每个类都使用了@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是一个数组,每个数组元素都是一个包含nameage属性的对象。”

       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 方法这些貌似通常的编辑器都可以做到了,再加上有通义灵码或华为或微软的加持,这个依赖貌似可以不用有。

  • 22
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值