springboot配置文件值注入

使用@ConfigurationProperties注解

配置文件

person:
  #注入普通属性
  lastName: zhangsan
  age: 18
  birth: 1995/07/09
  boss: true
  #map
  maps: {key1: v1, key2: v2}
  #list
  lists: [1,2,a,b]
  #对象
  dog:
    name: xiaohua
    age: 3

javabean

package com.xun.springboot_config.bean;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @program:
 * @description:
 * @author: 寻。
 * @create: 2018-06-05 22:32
 **/

/**
 * 将配置文件中的每一个属性的值映射到这个组件这种
 * @ConfigurationProperties:告诉springboot将本类中的所有属性和配置文件进行绑定
 * prefix = "person" 指定配置文件中哪个下面的属性进行映射
 *
 * 只有这个组件是容器中的组件,才能提供@ConfigurationProperties功能
 */
@Component
@ConfigurationProperties(prefix = "person")
public class Person {

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

    private Map maps;
    private List lists;
    private Dog dog;

    get set toString方法省略。。。
}
 
 
package com.xun.springboot_config.bean;

/**
 * @program:
 * @description:
 * @author: 寻。
 * @create: 2018-06-05 22:35
 **/
public class Dog {

    private String name;
    private Integer age;
    get set toString方法省略。。。
}

使用springboot测试方法进行测试

package com.xun.springboot_config;

import com.xun.springboot_config.bean.Person;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootConfigApplicationTests {

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

}

测试结果:
Person{lastName='zhangsan', age=18, birth=Sun Jul 09 00:00:00 CST 1995, boss=true, maps={key1=v1, key2=v2}, lists=[1, 2, a, b], dog=Dog{name='xiaohua', age=3}}

使用@Value注解注入

@Component
public class Person {
    //只支持简单类型封装
    @Value("${person.lastName}")
    private String lastName;
    private Integer age;
    private Date birth;
    private boolean boss;

    //不支持复杂类型封装
    @Value("${person.maps}")
    private Map maps;
    private List lists;
    private Dog dog;
}
 
 

两者对比

如果说我们只是在某个业务中需要获取一下配置文件中的某项值,使用@Value;
例如:

package com.xun.springboot_config.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @program:
 * @description:
 * @author: 寻。
 * @create: 2018-06-05 23:36
 **/
@RestController
public class HelloController {

    @Value("${person.lastName}")
    private String name;

    @RequestMapping("hello")
    public String sayHello(){
        return "hello "+name;
    }

}

结果就是:hello zhangsan
如果专门编写了一个javabean来和配置文件进行映射,我们就直接使用@ConfigurationProperties(并且这个注解支持参数校验)

你可能感兴趣的:(springboot配置文件值注入)