### **1.6 配置文件屬性值的注入**
使用Spring Boot全局配置文件設(shè)置屬性時:
如果配置屬性是Spring Boot已有屬性儿子,例如服務(wù)端口server.port崎淳,那么Spring Boot內(nèi)部會自動掃描并讀取這些配置文件中的屬性值并覆蓋默認(rèn)屬性。
如果配置的屬性是用戶自定義屬性,例如剛剛自定義的Person實體類屬性,還必須在程序中注入這些配置屬性方可生效销斟。
Spring Boot支持多種注入配置文件屬性的方式,下面來介紹如何使用注解@ConfigurationProperties和@Value注入屬性?
#### 1.6.1?
使用@ConfigurationProperties注入屬性
Spring Boot提供的@ConfigurationProperties注解用來快速椒舵、方便地將配置文件中的自定義屬性值批量注入到某個Bean對象的多個對應(yīng)屬性中蚂踊。假設(shè)現(xiàn)在有一個配置文件,如果使用@ConfigurationProperties注入配置文件的屬性笔宿,示例代碼如下:
```java
@Component
@ConfigurationProperties(prefix =
"person")
public class Person {
private int id;? ? ?
// 屬性的setXX()方法
public void setId(int id) {
this.id = id;
? ? }
}
```
上述代碼使用@Component和@ConfigurationProperties(prefix
= “person”)將配置文件中的每個屬性映射到person類組件中犁钟。
需要注意的是,使用@ConfigurationProperties
#### 1.6.2 使用@Value注入屬性
@Value注解是Spring框架提供的泼橘,用來讀取配置文件中的屬性值并逐個注入到Bean對象的對應(yīng)屬性中涝动,Spring Boot框架從Spring框架中對@Value注解進行了默認(rèn)繼承,所以在Spring Boot框架中還可以使用該注解讀取和注入配置文件屬性值炬灭。使用@Value注入屬性的示例代碼如下?
```java
@Component
public class Person {
@Value("${person.id}")
private int id;? ? ?
}
```
?? ? ? ?
上述代碼中醋粟,使用@Component和@Value注入Person實體類的id屬性。其中,@Value不僅可以將配置文件的屬性注入Person的id屬性米愿,還可以直接給id屬性賦值厦凤,這點是@ConfigurationProperties不支持的?
演示@Value注解讀取并注入配置文件屬性的使用:
?? ? ? ?? (1)在com.lagou.pojo包下新創(chuàng)建一個實體類Student,并使用@Value注解注入屬性
```java
@Component
public class Student {
@Value("${person.id}")
private int id;
@Value("${person.name}")
private String name; //名稱
//省略toString
?? }
```
Student類使用@Value注解將配置文件的屬性值讀取和注入吗货。
從上述示例代碼可以看出泳唠,使用@Value注解方式需要對每一個屬性注入設(shè)置,同時又免去了屬性的setXX()方法
?? ? ?? (2)再次打開測試類進行測試
```java
@Autowired
private Student student;
@Test
public void studentTest() {
? ? ?? System.out.println(student);
}
```
打印結(jié)果:
?? ? ? ?
可以看出宙搬,測試方法studentTest()運行成功笨腥,同時正確打印出了Student實體類對象。需要說明的是勇垛,本示例中只是使用@Value注解對實例中Student對象的普通類型屬性進行了賦值演示脖母,而@Value注解對于包含Map集合、對象以及YAML文件格式的行內(nèi)式寫法的配置文件的屬性注入都不支持闲孤,如果賦值會出現(xiàn)錯誤?
***學(xué)習(xí)讓人快樂谆级,學(xué)習(xí)更讓人覺得無知!學(xué)了1個多月的《Java工程師高薪訓(xùn)練營》讼积,才發(fā)現(xiàn)自己對每個技術(shù)點的認(rèn)知都很膚淺唁影,根本深不下去淹仑,立個Flag:每天堅持學(xué)習(xí)一小時,一周回答網(wǎng)上3個技術(shù)問題,把自己知道都分享出來隆敢,奧利給芬骄!***