1. 程式人生 > 實用技巧 >@ConfigurationProperties與@Value的區別

@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{lastName='zhangxiaojian', age=22, boss=false, birth=null, maps=null, lists=null}

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來和配置檔案進行對映, 我們就直接使用