返回顶部
首页 > 资讯 > 后端开发 > Python >使用@Value 注入 List 类型的配置属性需要注意的 BUG
  • 949
分享到

使用@Value 注入 List 类型的配置属性需要注意的 BUG

2024-04-02 19:04:59 949人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

@Value 注入 List 类型的配置属性 @Value 注解可以方便的帮助我们注入配置属性值. 那么当注入一个 List 类型时该怎么做呢? 想必大家都会知道,可以使用下面这种写

@Value 注入 List 类型的配置属性

@Value 注解可以方便的帮助我们注入配置属性值.

那么当注入一个 List 类型时该怎么做呢?

想必大家都会知道,可以使用下面这种写法:


 @Value("#{'${zf.ids}'.split(',')}")
 private List<Integer> ids;

上面的配置简单说下就是,先使用 ${zf.ids} 拿到配置文件中 zf.ids 属性的值,然后使用 #{} 也就是 SPEL 表达式语言进行按,拆分,得到的结果转为 List<Integer>类型的值.

这样做没什么问题,可以说完美解决了 注入复杂类型的配置文件的属性

那么问题来了

如果 我们想要配置文件没有 zf.ids属性的时候注入一个空的 List 该怎么办呢?

这时候你可能说简单嘛,给 ${zf.ids}加个默认值就好了: ${zf.ids:}


 @Value("#{'${zf.ids:}'.split(',')}")
 private List<Integer> ids;

如上面所示,我们使用:来给 zf.ids添加一个默认值,为空.

那么这时候,我们的 ids 属性值的内容是什么呢?

是 空的 List<Integer>对象? 还是 ids 的值就是个 null 呢?

我们来实践一下:看看到底是什么?

打个断点,调试走起,可以看到:

image-20200918102125292

竟然不是 空 List,而且有一个值,我们看下 List 中的值到底是什么:

image-20200918102228396

发现竟然只有一个值为 null 的元素 !

跟踪源码查看 @Value("#{'${zf.ids:}'.split(',')}") 的解析过程

其中最关键的一步就是下面整个方法org.springframework.beans.TypeConverterDelegate#convertIfNecessary(java.lang.String, java.lang.Object, java.lang.Object, java.lang.Class, org.springframework.core.convert.TypeDescriptor)

会发现: ${zf.ids:) 被解析为 "" 一个空的字符串;

然后调用 SpEL 再次解析: #{''.split(',')} 即 返回一个数组,这个数组只有一个空的字符串

在这里插入图片描述

然后 Spring 会运用一系列的 Converter 进行类型转换,关键就在这一步:

String[] --> List<Integer> 时, 把数组中的空字符串转为 Integer 类型时,由于不能传唤,默认就是个 null

整个转过过程就是

[""] --> {""} --> {null}

最后我们就得到了一个只有一个 null 值的 List 集合!

至此,真相大白,在使用 @Value("#{'${zf.ids:}'.split(',')}") 注入 List 属性的时候尤其需要注意这个问题,搞不好就是个线上 bug ! ! !

@Value注入map、List,yaml格式

使用@Value注入map、List

实体类


@Value("#{'${list}'.split(',')}")
private List<String> list;
 
@Value("#{${maps}}")  
private Map<String,String> maps;

配置文件


list: topic1,topic2,topic3
maps: "{key1: 'value1', key2: 'value2'}"

ps:注意上面的map解析中,一定要用""把map所对应的value包起来,要不然解析会失败,导致不能转成 Map<String,String>。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: 使用@Value 注入 List 类型的配置属性需要注意的 BUG

本文链接: https://lsjlt.com/news/131685.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 使用@Value 注入 List 类型的配置属性需要注意的 BUG
    @Value 注入 List 类型的配置属性 @Value 注解可以方便的帮助我们注入配置属性值. 那么当注入一个 List 类型时该怎么做呢? 想必大家都会知道,可以使用下面这种写...
    99+
    2024-04-02
  • es~日期类型需要注意的
    es的Date类型支持的格式是有限的,默认是一个时间戳,可读性不是很好,需要解析之后才能使用,而它默认支持的格式只有如下几种,如果你在java里格式化的字符串不属于以下几种,将会出错。 UTC时间 //kibana里索引字段 @F...
    99+
    2019-05-24
    es~日期类型需要注意的
  • Java1.5的Enum类型使用时需要注意什么
    本篇内容主要讲解“Java1.5的Enum类型使用时需要注意什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java1.5的Enum类型使用时需要注意什么”吧!注意点:1。所有创建的枚举类型都...
    99+
    2023-06-03
  • 在python中使用类属性时需要注意哪些问题
    本篇文章给大家分享的是有关在python中使用类属性时需要注意哪些问题,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Python主要用来做什么Python主要应用于:1、Web...
    99+
    2023-06-14
  • springboot使用@value注入配置失败的解决
    目录springboot使用@value注入配置文件失败问题解决方向一问题解决方向二@Value注入失败,注入值为null的问题大概就是下面这样结果不知道为什么,@Value注入一直...
    99+
    2024-04-02
  • Java使用list集合remove需要注意的事项(使用示例)
    目录错误使用示例一:解决方案一:解决方案二:错误使用示例二:分析结果原因:解决方案:在实际开发中有时候会碰到这样的场景,需要将一个list集合中的某些特定的元素给删除掉,这个时候用可...
    99+
    2024-04-02
  • Mysql中varchar类型一些需要注意的地方
    varchar的存储规则 0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节)。 5.0版本以上,varchar(20),指的是20字符,无论...
    99+
    2022-05-27
    Mysql varchar类型 Mysql varchar类型注意的地方
  • Java使用list集合remove需要注意的事项有哪些
    这篇文章给大家介绍Java使用list集合remove需要注意的事项有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在实际开发中有时候会碰到这样的场景,需要将一个list集合中的某些特定的元素给删除掉,这个时候用可...
    99+
    2023-06-29
  • vue指令 v-bind的使用和注意需要注意的点
    目录1、v-bind:可以为元素的属性绑定一些数据2、v-bind:可以简写成 : 推荐直接写冒号3、v-bind:指令表达式的拼接,1、v-bind:可以为元素的属性绑定一些数据 ...
    99+
    2024-04-02
  • Spring中利用配置文件和@value注入属性值代码详解
    1 简单属性值注入package com.xy.test1;import org.springframework.beans.factory.annotation.Value;import org.springframework.stere...
    99+
    2023-05-30
    spring 注入属性值 ue
  • 选购云主机的配置需要注意什么
    云主机选购配置的注意因素:1. 注意云主机使用的性能,服务商是否能保证云主机正常、流畅的使用。2. 注意机房的质量,能否保证最佳的网站、APP响应时间。3. 留意服务商的资质与认证,有无权威认证,是否合法经营。具体内容如下:一、使用性能重要...
    99+
    2024-04-02
  • Android LiveData使用需要注意的地方
    目录1.回调通知2.数据倒灌3.事件包装关于LiveData是什么以及基本使用方式,请参考官方文档:developer.android.com/topic/libra… 简单来说,L...
    99+
    2024-04-02
  • 使用java对screen进行配置时需要注意哪些事项
    这篇文章将为大家详细讲解有关使用java对screen进行配置时需要注意哪些事项,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。java screen的配置详解及注意事项# Set defau...
    99+
    2023-05-31
    java screen ava
  • 使用CSS中的display:none时需要注意什么
    小编给大家分享一下使用CSS中的display:none时需要注意什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!CSS di...
    99+
    2024-04-02
  • Spring根据XML配置文件注入属性的方法
    方法一使用setter方法package com.swift;public class Book { private String bookName; public void setBook(String bookName) { this...
    99+
    2023-05-30
    spring xml 配置文件
  • MySQL数值类型在binlog中需要注意的细节有哪些
    MySQL数值类型在binlog中需要注意的细节有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。     ...
    99+
    2024-04-02
  • 香港服务器租用需要注意的配置因素有哪些
    香港服务器租用需要注意的配置因素:1. 香港服务器租用注意服务器的硬件配置大小,留意硬盘的好坏,选择合适的服务器配置。2. 香港服务器租用注意服务器的带宽,区分本地带宽和共享带宽,确保服务器租用独享国际带宽。3. 香港服务器租用注意服务器的...
    99+
    2024-04-02
  • MySQL 触发器的使用及需要注意的地方
    关于触发器 现实开发中我们经常会遇到这种情况,比如添加、删除和修改信息的时候需要记录日志,我们就要在完成常规的数据库逻辑操作之后再去写入日志表,这样变成了两步操作,更复杂了。 又比如删除一个人员信息的时候,需要将他...
    99+
    2022-05-25
    MySQL 触发器
  • C#异步使用需要注意的几个问题
    目录一、异步模型的基本概述二、C#异步使用需要注意的几个问题三、CancellationToken 结构体1.手动取消2.利用方法取消,抛出异常3. 传参数取消4.手动触发事件取消任...
    99+
    2024-04-02
  • AndroidSeekBar在刷新使用中需要注意的问题
    目录问题分析问题解决方法Android开发笔记:关于SeekBar在刷新使用中的一些问题 问题 今天在用Navigation 在两个Fragment之间导航时发现了从第二个Fragm...
    99+
    2023-05-19
    Android SeekBar Android SeekBar刷新问题
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作