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

yizhihongxing

为了解释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日

相关文章

  • Android 监听apk安装替换卸载广播的实现代码

    以下是实现Android监听APK安装、替换和卸载广播的完整攻略: 步骤1:创建广播接收器 首先,我们需要创建一个广播接收器来监听APK的安装、替换和卸载事件。可以按照以下步骤进行操作: 在AndroidManifest.xml文件中声明广播接收器: xml <receiver android:name=\”.MyBroadcastReceiver\”…

    other 2023年10月14日
    00
  • ibmappscan基本操作手册

    IBM AppScan 基本操作手册 IBM AppScan 是一款用于 Web 应用程序安全测试的工具,它可以帮助用户发现 Web 应用程序的安全漏洞和风险。在本攻略中,我们将介如何使用 IBMScan 进行基本操作,并提供两个示例说明。 安装 在使用 IBM AppScan 之前,您需要先安装它。以下是装 IBM AppScan 的步骤: 下载 IBM …

    other 2023年5月6日
    00
  • eclipse安装git插件

    Eclipse安装Git插件攻略 Git是一种流行的版本控制系统,而Eclipse是一种流行的集成开发环境(IDE)。在Eclipse中安装Git插件可以让您更方便地使用Git进行版本控制。以下是在Eclipse中安装Git插件的完整攻略,包括两个示例说明。 步骤 打开Eclipse,选择“Help”菜单,然后选择“Eclipse Marketplace”选…

    other 2023年5月8日
    00
  • 详解Angular组件之生命周期(二)

    《详解Angular组件之生命周期(二)》是一篇介绍Angular组件生命周期的文章,包含了组件生命周期的各个阶段及其对应的钩子函数,以及各个阶段的具体实现代码等内容。 首先,文章介绍了Angular组件生命周期的主要阶段,包括: ngOnChanges:监听组件输入属性的变化并进行相应处理,包括@Input装饰器绑定的变量的变化。 ngOnInit:在组件…

    other 2023年6月27日
    00
  • 魔兽世界wlk怀旧服毁灭术堆什么属性 毁灭术属性优先级选择攻略

    魔兽世界wlk怀旧服毁灭术堆什么属性 毁灭术属性优先级选择攻略 简介 在WOW Classic怀旧服中,毁灭术是术士职业的一种重要输出技能。那么在玩WOW Wlk怀旧服时,我们该如何选择适合的属性来提升毁灭术的输出效果呢? 在本篇攻略中,我们将详细讲解影响毁灭术输出的属性,并给出毁灭术属性优先级的选择攻略,帮助你在游戏中提升毁灭术的输出效果。 影响毁灭术输出…

    other 2023年6月27日
    00
  • 慎升级! Win11更新KB5025239后遇 错误报告 TPM 2.0 / 蓝屏 等问题

    慎升级!Win11更新KB5025239后遇错误报告TPM 2.0 / 蓝屏等问题攻略 问题描述 最近,一些用户在升级Windows 11操作系统后遇到了一些问题,包括错误报告TPM 2.0和蓝屏等问题。这些问题可能与最新的更新KB5025239有关。下面是解决这些问题的攻略。 步骤一:备份重要数据 在进行任何操作之前,建议您首先备份重要的数据。这样可以确保…

    other 2023年8月3日
    00
  • Jquery给基本控件的取值、赋值示例

    当使用 jQuery 时,我们可以使用 val() 方法来获取或设置表单元素的值。val() 方法适用于 input 元素(不包括 button),select 元素,和 textarea 元素。本文将详细介绍如何使用 jQuery 的 val() 方法来给基本控件取值和赋值。 基本语法 获取值: $("selector").val();…

    other 2023年6月27日
    00
  • Android实现折线图小工具

    当在Android应用中实现折线图小工具时,可以按照以下攻略进行操作: 1. 导入图表库 首先,您需要导入一个图表库,例如MPAndroidChart,它提供了丰富的图表功能。您可以在项目的build.gradle文件中添加以下依赖项: implementation ‘com.github.PhilJay:MPAndroidChart:v3.1.0’ 2. …

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