yaml 配置文件值获取

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
练习:
步骤,及注意的点:
1、创建两个class:person,和dog,并且初始化。包括数据及set,get方法。
2、在resource下新建一个以.yml为后缀的文件。
3、需要往pom.xml中写一个依赖,导入配置文件处理器,配置文件进行绑定时会有提示。
4、根据以上的格式来写yml文件,需要注意的是,文件中数据类型一定要与写的数据相对应。
5、将配置文件中每一个属性的值,映射到这个组件中。
@ConfigurationProperties告诉springboot 将本类中的所有属性,与配置文件中相关的配置进行绑定。
prefix = “person”:配置文件中哪个下面的所有属性进行一一映射

在这里插入图片描述
在这里插入图片描述

@ConfigurationProperties(prefix = “person”)默认从全局配置文件中获取值
所以如果我们想把一些与spring boot一些无关的配置提取出来,就需要用到
@PropertySource(value ={“classpath:person.properties”}) --告诉spring boot 来加载类路径下person.properties的内容并且将他们绑定到这个person对象中。
当然,前提是我们自己已经建了一个person.properties文件,并且已经对其进行配置。

6、只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能
所以需要@Component来将其加到容器中。

代码部分:
person:


import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;
import java.util.Map;
/*
将配置文件中每一个属性的值,映射到这个组件中。
@ConfigurationProperties告诉springboot 将本类中的所有属性,与配置文件中相关的配置进行绑定
 prefix = "person":配置文件中哪个下面的所有属性进行一一映射

 只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能
 所以需要@Component来将其加到容器中。

  */
@Component
@ConfigurationProperties(prefix = "person")
public class Person {

    private  String lastName;
    private Integer age;
    private boolean boss;
    private Date birth;

    private Map<String,Object> maps;
    private List<Object> lists;
    private  Dog dog;

    public String getLastName() {
        return lastName;
    }

    public Integer getAge() {
        return age;
    }

    public boolean isBoss() {
        return boss;
    }

    public Date getBirth() {
        return birth;
    }

    public Map<String, Object> getMaps() {
        return maps;
    }

    public List<Object> getLists() {
        return lists;
    }

    public Dog getDog() {
        return dog;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public void setBoss(boolean boss) {
        this.boss = boss;
    }

    public void setBirth(Date birth) {
        this.birth = birth;
    }

    public void setMaps(Map<String, Object> maps) {
        this.maps = maps;
    }

    public void setLists(List<Object> lists) {
        this.lists = lists;
    }

    public void setDog(Dog dog) {
        this.dog = dog;
    }

    @Override
    public String toString() {
        return "Person{" +
                "lastName='" + lastName + '\'' +
                ", age=" + age +
                ", boss=" + boss +
                ", brith=" + birth +
                ", maps=" + maps +
                ", lists=" + lists +
                ", dog=" + dog +
                '}';
    }
}

dog:


public class Dog {
    private String name;
    private Integer age;

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public Integer getAge() {
        return age;
    }

    @Override
    public String toString() {
        return "Dog{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

yml:

person:
  age: 12
  last-name: 小明
  boss: false
  maps: {k1: v1,k2: 12}
  lists:
    - lisi
    - zhaoliu
  dog:
    name: 小狗
    age: 21
  birth: 2012/4/9

以下是一个单元测试
spring boot 的单元测试:
可以在测试期间,很方便的类似编码一样进行自动注入等容器的功能。
重点是
@Autowired
Person person;


@SpringBootTest
class DemoApplicationTests {

	@Autowired
	Person person;

	@Test
	void contextLoads() {
		System.out.println(person);
	}

}

测试结果:

Person{lastName='小明', age=12, boss=false, brith=Mon Apr 09 00:00:00 CST 2012, maps={k1=v1, k2=12}, lists=[lisi, zhaoliu], dog=Dog{name='小狗', age=21}}

Spring Boot应该如何导入spring配置文件呢?
一:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
二:
在这里插入图片描述
补充一点是关于@bean和@component的区别
1、@Component 是用在类上的
2、@Bean 需要在配置类中使用,即类上需要加上@Configuration注解

如果你想要将第三方库中的组件装配到你的应用中,在这种情况下,是没有办法在它的类上添加@Component注解的,因此就不能使用自动化装配的方案了,但是我们可以使用@Bean。

spring boot 导入spring配置文件自己的一些思考:

第一种方法是新建一个xml文件,然后在其中写入bean,并且还需要在需要导入的组件上面标志@importResource(location=“classpath={}”).
但是之所以会有第二种方法就是因为,第二种方法对其进行了优化处理。
优化在于
1、不需要创建xml文件对其进行配置。而是再新建一个类,再类上申明这是一个配置类@configuration。
2、不需要再配置bean,而是直接使用@bean就可以将配置类中方法的return(返回值)这个组件加入到容器中。
3、不需要再在组件上标注@importResource,来获取配置文件后将组件注入容器。而是只需前两步就可以完成操作。

发布了51 篇原创文章 · 获赞 11 · 访问量 1768

猜你喜欢

转载自blog.csdn.net/weixin_45276914/article/details/105349166