使用@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<String,Object> maps;
private List<Object> 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<String,Object> maps;
private List<Object> 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(并且这个注解支持参数校验)
网友评论