Spring中@Value读取properties作为map或list的操作

为了解释Spring中@Value读取properties作为MapList的操作,我们需要先了解@Value的基本用法。

@Value是Spring框架提供的一个注解,可以用于为类中的属性注入值。它有两种形式:

  • @Value("value")
  • @Value("#{expression}")

第一种形式支持直接赋值,第二种形式可以使用SpEL表达式来计算。两种形式都可以读取properties文件中的值。

假设我们有一个properties文件:

server.port=8080
server.context=/myapp
my.list=one,two,three
my.map.key1=value1
my.map.key2=value2

接下来,我们可以使用@Value注解来读取这个properties文件。

将属性值作为字符串

如果我们只需要将属性值作为字符串读取,可以直接使用@Value注解读取属性值。例如:

@Component
public class MyComponent {
    @Value("${server.port}")
    private String serverPort;

    public void printServerPort() {
        System.out.println(serverPort);
    }
}

在上面的示例中,我们将${server.port}作为参数传递给了@Value注解。Spring会自动读取properties文件中的值,并将其注入到serverPort属性中。

另外,可以使用${}语法来读取properties文件中的值。其中,${}中的字符串是要读取的属性名。

将属性值作为List

如果我们需要将一个属性值作为List读取,可以使用@Value注解的第二种形式。例如:

@Component
public class MyComponent {
    @Value("#{'${my.list}'.split(',')}")
    private List<String> myList;

    public void printList() {
        System.out.println(myList);
    }
}

在上面的示例中,我们使用${my.list}properties文件中读取一个字符串。接着,在SpEL表达式中,我们通过split(',')将字符串分割成一个List。最后,将该List注入到了myList属性中。

注:在@Value注解中使用表达式时,需要将表达式用花括号括起来,并且在表达式前面加上井号符号#

将属性值作为Map

如果我们需要将一个属性值作为Map读取,可以使用@Value注解的第二种形式,并将返回值转换为Map。例如:

@Component
public class MyComponent {
    @Value("#{${my.map}}")
    private Map<String, String> myMap;

    public void printMap() {
        System.out.println(myMap);
    }
}

在上面的示例中,我们使用${my.map}properties文件中读取一个Map。在SpEL表达式中,我们将该Map直接返回。最后,将该Map注入到了myMap属性中。

注:在@Value注解中使用表达式时,使用#{}将表达式包裹,并将属性值作为表达式返回值。

示例1

@Value("#{${testMap}}")
Map<String,String> testMap;

@Test
public void contextLoads() {
    testMap.keySet().forEach(key -> {
        System.out.println(key+":"+testMap.get(key));
    });
}

我们定义了一个testMap,读取下面这段配置

testMap={key1:'value1',key2:'value2',key3:'value3'}

我们的程序输出如下

key2:value2
key3:value3
key1:value1

我们获取到了一个三个元素的Map,并且Map的顺序与properties中的不一样。这是由于在properties中,键值对是无序的。如果要获取有序的Map,可以使用LinkedHashMap

示例2

@Value("#{'${testList}'.split(',')}")
List<String> testList;

@Test
public void contextLoads() {
    System.out.println(testList);
}

我们读取了下面这个配置:

testList=apple,banana,orange

通过使用.split(','),我们将字符串转换为了一个List,输出的内容为

[apple, banana, orange]

以上两个示例都是通过先读取properties文件的键值对,再使用@Value注解将值注入到我们的类中,从而在代码中使用读取到的值。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring中@Value读取properties作为map或list的操作 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • IOS使用TestFlight测试的使用方法

    下面我将为你详细讲解 iOS 使用 TestFlight 测试的使用方法。 什么是 TestFlight TestFlight 是一个由苹果公司提供的用于 iOS 应用的 beta 测试平台。通过 TestFlight,开发者可以将应用测试版本发送给测试者,让他们在测试版中使用和体验应用,测试者还可以向开发者提供反馈和 bug 报告。TestFlight 有…

    other 2023年6月28日
    00
  • CAD怎么创建块和分解块?

    以下是在CAD软件中创建块和分解块的完整攻略: 创建块 打开CAD软件,并打开您要创建块的绘图文件。 选择要创建块的对象,可以是单个对象或多个对象。 在CAD软件的菜单栏中,找到“编辑”或“修改”等选项,点击打开下拉菜单。 在下拉菜单中,找到“创建块”或类似的选项,点击进入块创建界面。 在块创建界面中,输入块的名称,并根据需要设置其他属性,如插入点、旋转角度…

    other 2023年10月16日
    00
  • 如何让32位Win7完美使用4G内存的方法介绍

    如何让32位Win7完美使用4G内存的方法介绍 由于32位的Windows 7操作系统默认只能使用3.2GB的内存,如果你想让它完美地使用4GB内存,你可以按照以下步骤进行设置。 步骤一:检查操作系统版本 首先,确保你的Windows 7是32位版本。你可以通过以下步骤来检查: 点击开始菜单,选择“计算机”。 右键点击“计算机”,选择“属性”。 在“系统”窗…

    other 2023年7月28日
    00
  • mongodb多层嵌套查询

    mongodb多层嵌套查询 MongoDB是一个非关系型数据库,支持嵌套文档,即在一个文档中嵌套其他文档。对于需要查询多层嵌套文档的需求,本文将介绍MongoDB的多层嵌套查询方法。 基础查询 假设我们有一个集合(Collection)叫做students,其中存储了学生个人信息和课程信息。 { "_id": ObjectId(&quot…

    其他 2023年3月28日
    00
  • iOS9开发者预览版固件下载地址汇总

    iOS9开发者预览版固件下载地址汇总 简介 本文旨在为广大iOS开发者提供一份完整的iOS9开发者预览版固件下载地址汇总,以方便开发者高效获取开发资料。 下载地址 iOS9开发者预览版的固件下载地址由苹果公司官方网站提供,下载前请确保自己已加入开发计划并获得了相应权限。以下是几条常用的下载地址: iPhone 6 Plus iPad Air 2 (6th G…

    other 2023年6月26日
    00
  • 详解C++ bitset用法

    详解C++ bitset用法 bitset是C++ STL中的一个类,用于位运算。它最主要的作用是用来压缩表示布尔值数组。bitset内部使用一个数组来存储每个位的状态,这个数组通常使用一个整数类型的数组,每个整数通常为一个字长,即32或64位。可以使用位运算符对bitset进行各种操作。 本文将详细讲解bitset的用法,以及两个示例说明。 基本用法 要使…

    other 2023年6月26日
    00
  • Java中递归、循环的优劣分析

    下面是Java中递归、循环的优劣分析的完整攻略。 1. 递归与循环的概念 递归和循环都是程序中常见的两种控制结构。简单来说,递归就是一个函数自己调用自己,而循环则是利用计数器或者条件语句来控制代码执行流程的结构。 2. 递归与循环的优劣分析 2.1 递归的优点 递归通常比循环简洁。递归代码可以更直接地反映问题本身的定义,更容易理解。 递归对于某些问题的求解方…

    other 2023年6月27日
    00
  • 基于HTML5 FileSystem API的使用介绍

    基于 HTML5 FileSystem API 的使用介绍 简介 HTML5 FileSystem API 允许web应用程序访问本地文件系统,从而增强了web应用程序的功能。这个API不需要服务器端的帮助,可以让用户本地文件系统的访问变得十分简单。 HTML5 FileSystem API通过两个对象的集合来实现:FileWriter和FileReader…

    other 2023年6月28日
    00
合作推广
合作推广
分享本页
返回顶部