Spring-@Value用法介绍

2023-10-29

Spring

@Value在开发中最常使用的几个注解之一,通常用来获取配置文件中的属性。

不过除了从配置文件中获取值,@Value还支持使用默认值、表达式等方式为变量设置值。

本文就针对@Value的使用进行分享。

@Value用法

@Value中直接设置值

顾名思义这种方式就是在@Value中为属性赋值,且基本的数据类型都可以通过这种方式赋值。

如下示例为String、int、float、boolean等类型的变量进行了赋值。

@Value("testValue")
private String defaultString;

@Value("123")
private Integer defaultInt;

@Value("123.9")
private Float defaultFloat;

@Value("123333321")
private Long defaultLong;

@Value("true")
private Boolean defaultBoolean;

除了基础类型,对于list类型也可以通过这种方式赋值

@Value("{test:'valueTest'}")
private Map<String, String> defaultMap;
@Value("12,123,321")
private List<Integer> defaultList;

map 应该也可以通过这种方式赋值,但是我通过下边的几种方式赋值都失败了,追了一下源码中的TypeConverterSupport.convertIfNecessary的方法,但是并没有找到类型转换失败的原因。

有知道通过这种方式怎么注入map的同志可以交流下。

@Value("{test:'valueTest'}")
private Map<String, String> defaultMap;
@Value("{test:\"valueTest\"}")
private Map<String, String> defaultMapV2;
@Value("{\"test\":\"valueTest\"}")
private Map<String, String> defaultMapV3;

@Value中使用spel表达式

@Value中使用表达式对属性赋值,需要用到 #{},并且相应的对于基础类型,复杂类型也都可以赋值。

这里比较特殊的是map类型,用表达式 “#{{key:‘testValue’,key2:12344}}” 可以赋值,猜测应该是直接写map的方式无法完成类型转换。

另一个比较特殊的使用方式是最后一个,@Value(“#{readConfigService.testConfigId}”) 这里readConfigService是另一个bean,testConfigId是这个bean里的属性。所以 在进行属性注入的时候,可以注入其他bean中的属性

@Value("#{'sss'}")
private String spelStringValue;
@Value("#{123}")
private Integer spelIntValue;
@Value("#{123.33}")
private Float spelFloatValue;
@Value("#{true}")
private Boolean spelBooleanValue;

@Value("#{'123,1231,123123'.split(',')}")
private List<Integer> spelListValue;

@Value("#{{key:'testValue',key2:12344}}")
private Map<String, Object> spelMapValue;

@Value("#{readConfigService.testConfigId}")
private String spelClazzValue;

@Value中使用$占位符

通过占位符注入配置中的值,需要使用 ${} 也就是我们开发中最常用的方式。

@Value("${value.string}")
private String phStringValue;
@Value("${value.int}")
private String phIntValue;
@Value("${value.float}")
private String phFloatValue;
@Value("${value.boolean}")
private String phBooleanValue;

@Value("${value.list}")
private List<Object> phListValue;
@Value("#{${value.maps}}")
private Map<String, Object> phMapValue;

上边给出了使用占位符注入属性的示例,其中有一点需要注意一下。
map需要和spel表达式结合,才能完成完成注入,即 “#{${value.maps}}” 这种方式,而且在yml配置文件中,也需要注意value前后是需要有 "

value:
  string: 1aass
  int: 123
  float: 123.33
  boolean: true
  maps: "{test1:'value1',test2:'value2',test3:123}"
  list: 123,qwe,asd,231.3

总结

这一篇文章主要是对@Value的不同使用方法进行了介绍,没有过于深入的解析。

本文旨在自我学习记忆,同时让大家知道@Value还有这么多的使用方式。其实这篇文章偏于奇淫巧技的介绍,下次见到类似的使用,我们不发懵就可以咯~~

引用

关于@Value表达式的使用
value注入map
@Value注入map、list

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring-@Value用法介绍 的相关文章

  • 将 for 循环转换为 concat String 为 lambda 表达式

    我有以下 for 循环 它迭代字符串列表并将每个单词的第一个字符存储在StringBuilder 我想知道如何将其转换为 lambda 表达式 StringBuilder chars new StringBuilder for String
  • Java:如何将所有 java 日期分组到相应的周中?

    Problem 我有一个很大的日期清单 我需要按周安排它们 问题 如何按以下方式对日期进行分组一年中的一周他们在吗 示例数据集 Date date new SimpleDateFormat parse 04 01 2015 Date dat
  • Java 1.6 和 Desktop.open() 的问题

    我一直在使用 Destop open 在 Windows 计算机 Vista 和 XP 上启动 pdf 查看器 并且大多数都工作得很好 但是 在一台 XP 计算机上 该调用不起作用 只是返回而不抛出任何异常 并且查看器不会启动 据我所知 在
  • 如何将背景图像设置到 JPanel 中的 JTextArea

    我想在JTextArea 我在谷歌上查找过 但没有结果 背景可能是一个标志 我也想知道如何设置背景的分辨率 我的包中只有一门课 我有一个 MySQL 连接器驱动程序作为参考库 我的工作台是 Eclipse 使用 Fat jar 插件导出 j
  • 在“Java Web 服务教程”之后找不到 taskdef 类 com.sun.tools.ws.ant.WsImport

    我在许多不同的地方看到了同样的问题 即使经过大量谷歌搜索 我也无法解决它 我想做的 更大的图景 是经历Java Web 服务教程 http download oracle com docs cd E17802 01 webservices
  • java中应用程序的CPU核心数和线程数之间有什么关系?

    我是java新手多线程编程 我想到的问题是 根据我的数量 我可以运行多少个线程CPU核心数 如果我运行的线程超过CPU核心数机器运行应用程序会产生开销吗 例如 当我们有一台服务器计算机 其中有一个运行 2 个线程 主线程 开发人员线程 的服
  • JTable 使用行号?

    我正在创建一个程序 其工作原理如下Microsoft Excel 在JAVA中 我的问题是如何将行号放在每行旁边JTable 我已经看到它在其他 Java 程序中工作 我只是不知道如何将它包含在我的程序中 谷歌给了我这个网站 http ti
  • Scala - InvalidClassException:没有有效的构造函数

    我创建了一个Serializable番石榴的版本ImmutableRangeMap and Builder在 Scala 中以便在我的 Spark 应用程序中使用 我的构造函数中有一个零参数SerializableImmutableRang
  • Spring 在使用 JUnit 的单元测试中不自动装配

    我使用 JUnit 测试以下 DAO Repository public class MyDao Autowired private SessionFactory sessionFactory Other stuff here 正如您所看到
  • 请求的操作:声明您的广告 ID 权限

    今天我收到这封电子邮件 去年 7 月 我们宣布了广告政策变更 以帮助加强 安全和隐私 我们对使用的标识符添加了新的限制 针对儿童的应用程序 当用户选择删除他们的 广告 ID 以选择退出个性化广告 如果满足以下条件 开发人员将收到一串零而不是
  • 用 Maven 解决 jar 地狱问题?

    我正在使用两个 jars A 和 B B 是一个库 A 的类使用库 B 中的一些旧类 现在 当我将这两个 jars 包含在我的项目类路径中时 这给我带来了一个问题 因为它们的名称相同两个班级 但其中一个班级比另一个班级年长 并且行为方式不同
  • 如何设置鼠标监听器的优先级

    我有一个带有列表和按钮的面板 名单已定MouseAdapter with mouseClick 我添加到面板MouseAdapter with mousePressed and mouseReleased and MouseMotionAd
  • Java 8 元空间垃圾收集

    我正在运行的 java 进程在运行的第一个小时左右始终表现良好 然而 性能会迅速下降 在分析时 我发现元空间垃圾收集相当频繁地发生 直到小时标记 然后失去控制 我相当确定我能够使用 XX MaxMetaspaceSize 选项来解决此问题
  • 使用Optional进行空检查

    我想使用可选实用程序在 JDK8 中执行空检查 这是我正在编写的代码 它给了我一个错误 java util Optional stringToUse java util Optional of childPage getContentRes
  • 如何安装“Android 支持库”以将 Gluon Mobile 应用程序部署到 Android?

    我想使用 Gluon Mobile 框架开发一个 Android 应用程序 我在 Netbeans IDE 中安装了 Gluon 插件 创建了一个示例项目并成功构建了它 现在我想将该应用程序部署到 Android 设备 我指的是在线文档 1
  • ViewCompat.setOnApplyWindowInsetsListener使状态栏颜色消失

    这是我用来检测何时的代码Keyboard Height变化 唯一的问题是Statur Bar当此代码运行时 颜色消失并变为白色 ViewCompat setOnApplyWindowInsetsListener this getWindow
  • 使用Java 8开发的程序可以在Java 7上运行吗?

    我有点困惑 Oracle 表示 Java 8 与 Java 7 向后 高度兼容 但是 Java 8 程序有什么可能性可以在 Java 7 上成功运行 SE EE 呢 如果第一点为真 Java 8 应用程序将在 Java 7 服务器支持上部署
  • 在 OpenCV 中将 `BufferedImage` 转换为 `Mat`

    我怎样才能转换BufferedImage to a Mat in OpenCV 我正在使用 JAVA 包装器OpenCV not JavaCV 由于我是新手OpenCV我在理解如何做时遇到一些问题Mat works 我想做这样的事情 基于
  • 使用 Appengine 进行多线程处理

    既然Appengine不允许java多线程 那么我们如何将现有的多线程代码迁移到该平台呢 例如我有以下代码 Thread t new Thread public boolean alive true public void run whil
  • 我可以在Java中设置枚举起始值吗?

    我使用枚举来创建一些常量 enum ids OPEN CLOSE OPEN 值为零 但我希望它为 100 这可能吗 Java 枚举与 C 或 C 枚举不同 后者实际上只是整数的标签 Java 枚举的实现更像是类 它们甚至可以有多个属性 pu

随机推荐

  • 机器学习单变量线性回归

    1 模型概述 给出一些带有标签的数据 即带有 正确答案 的数据 用y ax b 的形式去拟合数据 线性 单变量 大致过程如下 给出训练集 带有标签的数据 通过学习算法选择不错的参数 theta0 theta1 得到假设函数h 从x到y 的映
  • 数据库之分库分表-垂直?水平?

    一 数据库瓶颈 不管是IO瓶颈 还是CPU瓶颈 最终都会导致数据库的活跃连接数增加 进而逼近甚至达到数据库可承载活跃连接数的阈值 在业务Service来看就是 可用数据库连接少甚至无连接可用 接下来就可以想象了吧 并发量 吞吐量 崩溃 1
  • 小智ai:ChatGPT3主要功能这些功能可以说明什么问题?

    ChatGPT3在自然语言处理领域中的强大能力 尤其是在文本生成和语言模型训练方面 它可以模拟人类的语言能力 理解人类的意图并生成自然的回复和文本 ChatGPT3的语言翻译和语音转文本功能也使得跨语言交流和语音交互变得更加容易 它可以自动
  • QQ取色器功能

    一 使用方法 QQ截图功能具有取色器功能 二 截取颜色三原色 1 截图 Ctral ALT A 2 找到取色目标 3 按 C 键 4 CTRL V 5 得到颜色三原色 255 255 255 三 截取十六进制颜色 1 截图 Ctral AL
  • 第三方yum源仓库搭建

    作用 第三方软件是yum仓库里没有的软件 如果从网上下载得到了软件 用yum还是不能安装 因为会有依赖性 解决依赖性非常麻烦 但是如果搭建了第三方软件仓库 yum就会自己解决这个问题 下载 浏览器搜索 sourceforge 源码安装包 r
  • 爬虫 第五讲 多线程爬虫

    文章目录 爬虫 第五讲 多线程爬虫 一 多线程 1 多线程基本介绍 2 主线程和子线程的执行关系 3 查看线程数量 4 验证子线程的执行与创建 5 继承Thread类创建线程 6 线程间的通信 多线程共享全局变量 7 线程间的资源竞争 二
  • 什么是Service, 以及Service 模板

    Service本质就是一个驻留Process 驻留Prcess至少有一个驻留线程 这个线程处在waiting的状态 相对于Runable 控制流停在某个点上 等待外部事件驱动 或者是自己的timer驱动 Windows Service 是一
  • 十行代码,我用Python做一个迷你版的美图秀秀!

    美图秀秀相信大家都不陌生 大家只要操作美图秀秀 就可以P掉图片中脸上的一些瑕疵 让人变得更加的美丽 今天小编就带领大家来借助Python和Flask来实现一个美图秀秀的网页设计 大家只需要通过网页上传需要美颜的图片 然后就可以从网页下载美颜
  • linux-shell是什么

    由于安全 复杂 繁琐等原因 用户不能直接解除内核 需要一个程序来接收用户的操作 进行处理后再传给内核 这一过程不仅做到了简化 同时也保护了内核 说白了Shell就是用来解释用户命令的 linuxshell可以看成一种脚本语言 高级语言能做到
  • 华为OD机试真题-匿名信C++实现【2023.Q1】

    题目内容 电视剧 分界线 里面有一个片段 男主为了向警察透露案件细节 且不暴露自己 于是将报刊上的字减下来 剪拼成匿名信 现在有一名举报人 希望借鉴这种手段 使用英文报刊完成举报操作 但为了增加文章的混淆度 只需满足每个单词中字母数量一致即
  • 取消springsecurity默认的登录验证

    取消springsecurity默认的登录验证 问题描述 解决方法一 方法二 问题描述 springboot 2 x 访问swagger ui html时 会自动跳转到springsecurity的login页 自定义过滤路径的拦截器无效
  • 详解FreeRTOS中的软件定时器

    软件定时器用于让某个任务定时执行 或者周期性执行 比如设定某个时间后执行某个函数 或者每隔一段时间执行某个函数 由软件定时器执行的函数称为软件定时器的回调函数 参考资料 Mastering the FreeRTOS Real Time Ke
  • 公司企业怎么做一个网站?

    怎么做一个网站对于一些实体的公司企业来说是个需要了解的问题 由于实体公司企业大部分情景下都是线下面谈业务 所以他们一开始并没有搭建自己的公司企业网站 而到了现在逐渐发展的阶段 就开始需要公司企业网站来开拓更多的客户资源或是提高公司企业的曝光
  • 这是一套基于THINKPHP6+SCUI+VUE2.6开发的CRM客户管理系统

    这是一套基于THINKPHP6 SCUI VUE2 6开发的CRM客户管理系统 演示 http v2 antsys cn 用户名admin 密码123456
  • 基于 webpack 5 实现自定义 loader

    前面的话 基于 webpack 5 创建自定义 同步 异步loader 在此基础上实现一个简易的渲染 markdown 的 loader 和 合成雪碧图的 loader 代码地址 自定义loader 准备工作 我们先创建一个 webpack
  • MacOS无法使用arduinoIDE解决方法

    1 当arduino ide版本过低时m1mac可能无法使用 出现可能是因为版本过低 Arduino 1 8 8 Mac OS X 开发板 Arduino Genuino Mega or Mega 2560 ATmega2560 Mega
  • 不能使用QtCreator debug Qt代码思路之一

    不能使用QtCreator debug Qt代码思路之一 在工程文件 pro中查找是否有 CONFIG release这样的配置 将它注释掉就可以开始debug了
  • ping www.baidu.com,显示name or service is not know

    相信许多网友都遇到过 前一天使用centos 还没有问题 第二天打开是 突然发现ping www baidu com 显示name or service is not know 大家可以打开windows任务管理器 找到服务 确保NAT正在
  • 类模板的特化

    你可以用模板实参来特化类模板 和函数模板的重载类似 通过特化类模板 你可以优化基于某种特定类型的实现 或者克服某种特定类型在实例化类模板时所出现的不足 另外 如果要特化一个类模板 你还要特化该类模板的所有成员函数 虽然也可以只特化某个成员函
  • Spring-@Value用法介绍

    Value在开发中最常使用的几个注解之一 通常用来获取配置文件中的属性 不过除了从配置文件中获取值 Value还支持使用默认值 表达式等方式为变量设置值 本文就针对 Value的使用进行分享 Value用法 Value中直接设置值 顾名思义