当前位置: 首页 > news >正文

YAML 中定义 List 的几种方式

在 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();}
}

三、注意事项

  1. 配置前缀匹配

    • @ConfigurationProperties 的 prefix 要与 yaml 中的父节点完全匹配
    • 字段名要与 yaml 中的子节点名称一致(支持驼峰命名转换)
  2. 依赖添加
    如果使用 @ConfigurationProperties,需要在 pom.xml 中添加依赖(Spring Boot 项目):

    xml

    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional>
    </dependency>
    

  3. 类型转换
    Spring 会自动进行类型转换,如字符串转数字、日期等,但要确保格式正确

  4. 默认值设置
    可以通过@Value("${my.list:默认值1,默认值2}")或在配置类中直接初始化设置默认值

通过以上方式,就可以在 YAML 中灵活定义各种类型的 List,并在 Spring 应用中方便地注入和使用了。

http://www.lryc.cn/news/622016.html

相关文章:

  • WEB安全--Java安全--Servlet内存马
  • 第十四节:物理引擎集成:Cannon.js入门
  • Linux之高可用集群实战(二)
  • 机器学习 - Kaggle项目实践(4)Toxic Comment Classification Challenge 垃圾评论分类问题
  • 嵌入式第二十九课!!!回收子进程资源空间函数与exec函数
  • 大模型——如何让 AI 绘图的中文呈现更稳定和准确
  • Spring 条件注解与 SPI 机制(深度解析)
  • LeetCode 面试经典 150_数组/字符串_最长公共前缀(20_14_C++_简单)(暴力破解)(求交集)
  • Docker 实战:情感分析系统-容器化部署全流程(sa-logic、sa-webapp、sa-frontend )
  • Highcharts Dashboards | 打造企业级数据仪表板:从图表到数据驾驶舱
  • CUDA 编程笔记:GPU 硬件资源
  • 敏捷数据开发实践:基于 Amazon Q Developer + Remote MCP 构建本地与云端 Amazon Redshift 交互体系
  • mysql-条件查询案例
  • C++从入门到实战(十九)C++ vector容器及其常用接口
  • dockerfile自定义镜像,乌班图版
  • 【开源大模型和闭源大模型分别有哪些?两者的对比?部署私有化模型的必要性有哪些?】
  • 解决zabbix图片中文乱码
  • Spring Boot 拦截器详解
  • HarmonyOS Camera Kit 全解析:从基础拍摄到跨设备协同的实战指南
  • 开源 Arkts 鸿蒙应用 开发(十六)自定义绘图控件--波形图
  • 成品电池综合测试仪:一站式评估性能与安全
  • Flutter 以模块化方案 适配 HarmonyOS 的实现方法
  • 嵌入式学习日记(29)进程、线程
  • 一分钟了解EtherCAT 分支器
  • Web攻防-大模型应用LLM搭建接入第三方内容喂养AI插件安全WiKI库技术赋能
  • Linux操作系统从入门到实战(二十三)详细讲解进程虚拟地址空间
  • 【数据可视化-90】2023 年城镇居民人均收入可视化分析:Python + pyecharts打造炫酷暗黑主题大屏
  • Redis 知识点与应用场景
  • Web 开发 15
  • webrtc编译arm/arm64