在 YAML 配置文件中定義 List 并在 Spring 應用中注入是非常常見的操作,下面詳細介紹具體寫法和注入方式。
一、YAML 中定義 List 的幾種方式
1. 縮進式寫法(推薦)
最常用的方式,通過短橫線?-
?加空格表示列表項:
yaml
# application.yml
my:# 基本類型List 這種寫法 要注意-后面不能有空格stringList:-蘋果-香蕉-橙子# 數字類型List 這種寫法 要注意-后面不能有空格numberList:-10-20-30# 對象類型ListuserList:-name: 張三age: 25-name: 李四age: 30-name: 王五age: 35
2. 行內式寫法(緊湊格式)
逗號分隔列表項:
yaml
# 行內式寫法
my:stringList: 蘋果, 香蕉, 橙子numberList: 10, 20, 30# 對象列表行內式userList: [{name: 張三, age: 25}, {name: 李四, age: 30}]
3. 混合寫法
根據場景靈活組合:
yaml
my:mixedList:- 基礎值- {key: value} # 行內對象- name: 測試value: 123 # 縮進對象
二、在 Spring 中注入 List 的方法
假設我們有如下配置類和實體類用于接收注入:
1. 實體類定義(用于對象列表)
java
運行
@Data
public class User {private String name;private Integer age;
}
2. 注入方式一:@Value 注解(適合簡單類型)
java
運行
@Component
public class ListConfig {// 注入字符串列表@Value("${my.stringList}")private List<String> stringList;// 注入數字列表@Value("${my.numberList}")private List<Integer> numberList;// 打印列表內容public void printLists() {System.out.println("字符串列表: " + stringList);System.out.println("數字列表: " + numberList);}
}
3. 注入方式二:@ConfigurationProperties(適合復雜類型)
更推薦的方式,支持對象列表和類型轉換:
java
運行
@Component
@ConfigurationProperties(prefix = "my") // 綁定前綴
@Data
public class MyConfig {private List<String> stringList;private List<Integer> numberList;private List<User> userList; // 對象類型列表
}
4. 使用注入的 List
java
運行
@SpringBootApplication
public class ListDemoApplication implements CommandLineRunner {@Autowiredprivate MyConfig myConfig; // 注入配置類@Autowiredprivate ListConfig listConfig; // 注入@Value配置public static void main(String[] args) {SpringApplication.run(ListDemoApplication.class, args);}@Overridepublic void run(String... args) {// 打印@ConfigurationProperties注入的列表System.out.println("用戶列表: " + myConfig.getUserList());// 打印@Value注入的列表listConfig.printLists();}
}
三、注意事項
配置前綴匹配:
- @ConfigurationProperties 的 prefix 要與 yaml 中的父節點完全匹配
- 字段名要與 yaml 中的子節點名稱一致(支持駝峰命名轉換)
依賴添加:
如果使用 @ConfigurationProperties,需要在 pom.xml 中添加依賴(Spring Boot 項目):xml
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional> </dependency>
類型轉換:
Spring 會自動進行類型轉換,如字符串轉數字、日期等,但要確保格式正確默認值設置:
可以通過@Value("${my.list:默認值1,默認值2}")
或在配置類中直接初始化設置默認值
通過以上方式,就可以在 YAML 中靈活定義各種類型的 List,并在 Spring 應用中方便地注入和使用了。