@ConfigurationProperties与@Value的区别

1. 首先我们来看每一个的具体使用

1. ConfigurationProperties

1. application.yml文件中:

person:
  lastName: xj
  age: 18
  boss: true
  birth: 2017/12/12
  maps: {k1: v1,k2: v2}
  lists:
    - lisi
    - zhaoliu
    - wangwu

2. Person类中:

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

    private String lastName;
    private int age;
    private boolean boss;
    private Date birth;
    private Map maps;
    private List lists;
    getset方法。。。
    toString方法。。。

3. 此时在测试文件中自动注入Person对象,然后打印输出

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

4. 可以看到输出结果

Person{lastName='xj', age=18, boss=true, birth=Tue Dec 12 00:00:00 CST 2017, maps={k1=v1, k2=v2}, lists=[lisi, zhaoliu, wangwu]}

2. Value

1. application.properties文件中:

和之前一样

2. Person类中:

@Component
public class Person {
    @Value("${person.lastName}")
    private String lastName;
    @Value("#{11*2}")
    private int age;
    private boolean boss;
    private Date birth;
    private Map maps;
    private List lists;
    getset方法。。。
    toString方法。。。

3. 再次测试可知

Person

2. @Value获取值和@ConfigurationProperties获取值比较

@ConfigurationProperties @Value
功能 批量注入配置文件中的属性 一个个指定
松散绑定(松散语法)lastName=last_name=last-name 支持 不支持
SpEL 不支持 支持
JSR303数据校验 支持 不支持
复杂类型封装 支持 不支持

注意:两种同时存在:@ConfigurationProperties等级更高

1. JSR303数据校验:

@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {
      @Email
      private String lastName;
      private Integer age;

3. 二者何时使用

  • 如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,此时使用@Value
    例如:
@RestController
public class HelloController {

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

    @RequestMapping("/sayHe11o")
    public String sayHello(){
        return "Hello " +name ;
    }
}
  • 如果说,我们专门编写了一个javaBean来和配置文件进行映射, 我们就直接使用@ConfigurationProperties
    @ConfigurationProperties :如果说,我们专门编写了一个javaBean来和配置文件进行映射, 我们就直接使用
posted @ 2020-09-10 10:23  微花  阅读(175)  评论(0编辑  收藏  举报

Loading