首页 > 技术文章 > Springboot:属性常量赋值以及yml配置文件语法(四)

applesnt 2020-04-10 22:51 原文

方式一: 注解赋值

构建javaBean:com\springboot\vo\Dog

1:@Component:注册bean到spring容器中
2:添加get set toString方法
3:使用@Value(" ")注解进行属性赋值
package com.springboot.vo;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component//注册bean
public class Dog {

    @Value("旺财")
    private String name;
    @Value("3")
    private Integer age;

	//添加get set toString方法
}

Springboot测试类测试:

@SpringBootTest
class HellospringbootApplicationTests {

    /*自动注入*/
    @Autowired
    private Dog dog;

    @Test
    void contextLoads() {
        /*打印信息*/
        System.out.println(dog.toString());
    }
}

打印结果:

Dog{name='旺财', age=3}

方式二: yml文件赋值

构建javaBean:com\springboot\vo\Person

1:@Component:注册bean到spring容器中
2:添加get set toString方法
3:使用@ConfigurationProperties(prefix = ""):通过application.yml自动注入对应的值
//注册bean
@Component 
//通过application.yml文件赋值 属性和配置文件的key要一致
@ConfigurationProperties(prefix = "person") 
public class Person {

    private String id;
    private String name;
    private Integer age;
    private boolean isHappy;
    private Date birthday;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;
    
	//添加get set toString方法
}

编写appliation.yml文件

person:
  id: ${random.uuid}  #表达式获取uuid
  name: 周星星
  age: 22
  isHappy: true
  birthday: 1986/09/03
  maps: {k1:v1,k2:v2}
  lists:
    - springboot
    - java
    - redis
  dog:
    name: ${person.name}_旺财 #表达式 获取name
    age: 3

使用@ConfigurationProperties这个注解会报红,添加依赖解决此问题:

报红依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

Springboot测试类测试:

@SpringBootTest
class HellospringbootApplicationTests {
    
    /*自动注入*/
    @Autowired
    private Person person;
    @Test
    void contextLoads() {
        System.out.println(person.toString());
    }
}

打印结果:

Person{id=cb9d58a6-67c3-4782-885b-03c3dd7d3ef8, name='周星星', age=22, isHappy=false, birthday=Wed Sep 03 00:00:00 CDT 1986, maps={k1v1=, k2v2=}, lists=[springboot, java, redis], dog=Dog{name='周星星_旺财', age=3}}

yml语法:

值的写法:

1>字面量:普通的值(数字,字符串,布尔)
k: v:字面直接来写;

字符串默认不用加上单引号或者双引号;

"":双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思

name: "zhangsan \n lisi":输出;zhangsan 换行 lisi

'':单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据

name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi

 
2>对象、Map(属性和值)(键值对):
k: v:在下一行来写对象的属性和值的关系;注意缩进

对象还是k: v的方式

friends:
        lastName: zhangsan
        age: 20
行内写法:

friends: {lastName: zhangsan,age: 18}
 

3>数组(List、Set):
用- 值表示数组中的一个元素
pets:
 - cat
 - dog
 - pig
行内写法

pets: [cat,dog,pig]

推荐阅读