@ConfigurationProperties與@Value的區別
阿新 • • 發佈:2020-09-10
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來和配置檔案進行對映, 我們就直接使用