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

【Spring】@Value注入配置文件 application.yml 中的值失败怎么办


本期目录

  • 一、 问题背景
  • 二、 问题原因
  • 三、 解决方法


一、 问题背景

今天碰到的问题是用 @Value 注解无法注入配置文件 application.yml 中的配置值。

检查过该类已经交给 Spring 容器管理了,即已经在类上加了 @Configuration@ConfigurationProperties(prefix = "xxx") 注解了。但还是注入失败。

下面是配置文件 application.yml 中要注入的配置值:

student: name: Tomage: 21

问题伪代码如下:

@Configuration
@ConfigurationProperties(prefix = "student")
public class StudentConfig {@Value("${student.name}")private String name;@Value("${student.age}")private int age;private Map<Long, Student> stuMap = new HashMap<>();// 使用空参构造器初始化stuMappublic StudentConfig() {stuMap.put(1001L, new Student(name, age));}
}

看起来没有问题,但当我获取 stuMap 中的 Student 对象时,却发现其两个属性 namenullage = 0 。
我明明已经通过 @Value 注入配置文件 application.yml 中的值了呀,为什么会注入失败呢?


二、 问题原因

上面的代码之所以注入失败,错误点在于我使用了构造器来初始化 stuMap 。要知道为什么,首选要知道 Spring 容器中 Bean 的生命周期。

Spring 创建 Bean 的过程如下:

构造器 --> 自动注入 (包括 @Value@Autowired ) --> @PostConstruct 修饰的初始化方法

从上面的执行顺序就不难看出,构造器中的方法首先被执行,此时两个属性 nameage 都还没被注入呢,自然就是 null 和 0 ;构造器方法执行完毕后,才到自动注入,这时候两个属性 nameage 才被赋值,但已经晚了。


三、 解决方法

根据Spring 创建 Bean 的执行顺序:

构造器 --> 自动注入 (包括 @Value@Autowired ) --> @PostConstruct 修饰的初始化方法

只要把原来写在构造器中的初始化代码,写到一个用 @PostConstruct 修饰的方法中即可。

修改后的代码就能成功注入配置文件 application.yml 中的值了。

@Configuration
@ConfigurationProperties(prefix = "student")
public class StudentConfig {@Value("${student.name}")private String name;@Value("${student.age}")private int age;private Map<Long, Student> stuMap = new HashMap<>();// 使用@PostConstruct注解初始化stuMap@PostConstructpublic void initStuMap() {stuMap.put(1001L, new Student(name, age));}
}

以上就是我工作中遇到的问题了,希望对你有帮助。

相关文章:

【Spring】@Value注入配置文件 application.yml 中的值失败怎么办

本期目录一、 问题背景二、 问题原因三、 解决方法一、 问题背景 今天碰到的问题是用 Value 注解无法注入配置文件 application.yml 中的配置值。 检查过该类已经交给 Spring 容器管理了&#xff0c;即已经在类上加了 Configuration 和 ConfigurationProperties(prefix &quo…...

CleanMyMac清理工具软件功能优势介绍

CleanMyMac更新最新版本x4.12&#xff0c;完美适配新版系统macOS10.14&#xff0c;拥有全新的界面。CleanMyMac可以让您安全、智能地扫描和清理整个系统&#xff0c;删除大型未使用的文件&#xff0c;减少iPod库的大小&#xff0c;最精确的应用程序卸载&#xff0c;卸载不必要的…...

【面试题】对JS中的事件冒泡、事件捕获、事件委托的理解

大厂面试题分享 面试题库后端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★地址&#xff1a;前端面试题库DOM事件流&#xff08;event flow &#xff09;存在三个阶段&#xff1a;事件捕获阶段、处于目标阶段、事件冒泡阶段。Dom标准事件流的触发的先…...

SAP 理解合并会计报表

随着企业集团的发展&#xff0c;集团内部会出现越来越多的公司&#xff1b;复杂的公司结构和复杂的集团内业务&#xff0c;使得集团内部管理困难重重&#xff0c;信息渠道严重失灵。除了内部管理的需要&#xff0c;企业还有义务向相关方提供详细的和及时的信息。ERP中的合并会计…...

Ubuntu 命令常用命令——定时启动程序

crontab -e 语法 crontab[ -u user ] file或 crontab[ -u user ] { -l | -r | -e }说明: crontab是用来让使用者在固定时间或固定间隔执行程序之用&#xff0c;换句话说&#xff0c;也就是类似使用者的时程表。 -U Lser 是指设定指定user的时程表&#xff0c;这个前提是你必…...

笔试题(十三):走迷宫

# 描述 # 定义一个二维数组 N*M &#xff0c;如 5 5 数组下所示&#xff1a; # int maze[5][5] { # 0, 1, 0, 0, 0, # 0, 1, 1, 1, 0, # 0, 0, 0, 0, 0, # 0, 1, 1, 1, 0, # 0, 0, 0, 1, 0,}; # 它表示一个迷宫&#xff0c;其中的1表示墙壁&#xff0c;0表示可以走的路&#…...

Gradle相关的知识学习

这里有一套博客文章写的比较通俗易懂&#xff1a;https://www.jianshu.com/p/8e1ddd19083a...

SpringMVC的工作原理

SpringMVC的工作原理流程图 SpringMVC流程 1、 用户发送请求至前端控制器DispatcherServlet。 2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找)&#xff0c;生成处理器对象及处理器拦截…...

问卷数据分析流程

文章目录一、数据合并1. 读取数据2. 数据预览二、数据清洗1. 检验ID是否重复&#xff0c;剔除ID重复项2. 剔除填写时间小于xx分钟的值3.处理 量表题 一直选一个选项的问题三、数据清洗1.1 将问卷单选题的选项code解码&#xff0c;还原成原来的选项1.2 自动获取单选题旧的选项列…...

【观察】Solidigm P44 Pro SSD评测:原厂品质+软硬兼施=性能怪兽

众所周知&#xff0c;目前SSD&#xff08;固态硬盘&#xff09;已取代HDD&#xff08;机械硬盘&#xff09;成为电脑中常见的存储设备&#xff0c;特别是在技术创新的持续推动下&#xff0c;如今SSD的速度和效率都在不断地提高&#xff0c;从SATA2 3GB发展到SATA3 6GB&#xff…...

String对象的创建和比较

String类的概述 String类&#xff1a;代表字符串。 Java 程序中的所有字符串字面值&#xff08;如 “abc” &#xff09;都作 为此类的实例实现。 String是JDK中内置的一个类&#xff1a;java.lang.string 。 String表示字符串类型&#xff0c;属于引用数据类型&#xff0c;不…...

09 OpenCV图形检测

1 轮廓描边 cv2.findContours() 函数是OpenCV中用于寻找轮廓的函数之一。它可以用于在二值图像中查找并检测出所有的物体轮廓&#xff0c;以及计算出这些轮廓的各种属性&#xff0c;例如面积、周长、质心等。 cv2.findContours() 函数的语法如下&#xff1a; contours, hiera…...

解密Teradata与中国市场“分手”背后的原因!国产数据库能填补空白吗?

2月15日&#xff0c;西方的情人节刚刚过去一天&#xff0c;国内IT行业就爆出一个大瓜。 继Adobe、甲骨文、Tableau、Salesforce之后&#xff0c;又一个IT巨头要撤离中国市场。 Teradata天睿公司官宣与中国市场“分手”&#xff0c;结束在中国的直接运营。目前&#xff0c;多家…...

Bernstein-Vazirani算法

B-V算法 (1) 问题描述 给定布尔函数f:{0,1}n→0,1f:{\left\{ {0,1} \right\}^n} \to{0,1}f:{0,1}n→0,1, 函数fff的值是由输入比特串xxx和确定的比特串sss做模2意义下的内积&#xff1a;f(x)x⋅s(mod2),f\left( x \right) x \cdot s\left( {\bmod 2} \right),f(x)x⋅s(mod2),…...

华为OD机试 - 相对开音节 | 备考思路,刷题要点,答疑 【新解法】

最近更新的博客 【新解法】华为OD机试 - 关联子串 | 备考思路,刷题要点,答疑,od Base 提供【新解法】华为OD机试 - 停车场最大距离 | 备考思路,刷题要点,答疑,od Base 提供【新解法】华为OD机试 - 任务调度 | 备考思路,刷题要点,答疑,od Base 提供【新解法】华为OD机试…...

MyBatis

一、MyBatis环境搭建创建工程启动idea开发工具&#xff0c;选择工具栏中的“file”--“new”--“project”选项弹出“new project”对话框&#xff0c;编辑项目名称 选择maven项目&#xff0c;项目路径 单击 create 创建即可。引入相关依赖<dependencies><dependency&…...

良好的作息表

今天给大家带来“传说中”的“世界上最健康的作息时间表”(仅供参考)&#xff0c;随时提醒自己吧&#xff0c;毕竟身体可是自己的哦。 7:30 起床&#xff1a;英国威斯敏斯特大学的研究人员发现&#xff0c;那些在早上5:22-7:21分起床的人&#xff0c;其血液中有一种能引起心脏病…...

【郭东白架构课 模块一:生存法则】01|模块导学:是什么在影响架构活动的成败?

你好&#xff0c;我是郭东白。这节课是我们模块一的导入部分&#xff0c;我会先来介绍模块的主要内容&#xff0c;以及为什么我要讲生存法则这个话题。 一名软件架构师要为相对复杂的业务制定&#xff0c;并且引导实施一个结构化的软件方案。这个发现最终方案和推动实施的过程&…...

webshell免杀之函数与变量玩法

webshell免杀之函数与变量玩法 前言 前文列举了一些用符号免杀的例子&#xff0c;此篇文章就以函数和变量来尝试下免杀。 本文以PHP为例&#xff0c;用PHP中函数和变量及语法特性&#xff0c;在不隐藏函数关键字情况下进行免杀。 动态函数 PHP中支持一个功能叫 variable fu…...

【新解法】华为OD机试 - 去重求和 | 备考思路,刷题要点,答疑,od Base 提供

华为 OD 清单查看地址:blog.csdn.net/hihell/category_12199275.html 去重求和 | 备考思路,刷题要点,答疑,od Base 提供 给定一个数组,编写一个函数, 计算他的最大N个数和最小N个数的和, 需要对数组进行去重。 输入 第一行输入M,M表示数组大小 第二行输入M个数,表…...

解放双手:D3KeyHelper让暗黑3游戏操作变得前所未有的简单

解放双手&#xff1a;D3KeyHelper让暗黑3游戏操作变得前所未有的简单 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面&#xff0c;可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 还在为暗黑3中繁琐的技能循环和…...

RK3368安卓9.0固件烧录后开机卡Recovery?手把手教你调整分区表解决4GB闪存空间不足

RK3368安卓9.0固件烧录实战&#xff1a;4GB闪存分区优化全解析 当你满怀期待地将Android 9.0固件烧录到RK3368开发板&#xff0c;却发现设备直接进入了Recovery模式&#xff0c;屏幕上躺着那个令人沮丧的红色感叹号机器人——这可能是每个嵌入式开发者都经历过的"入门仪式…...

移动安全架构:ECC加密与硬件加速实践解析

1. 移动安全架构的核心价值解析在2004年的移动通信市场&#xff0c;设备制造商正面临一个关键转折点。当时全球手机平均售价为163美元&#xff08;智能手机高达360美元&#xff09;&#xff0c;而设备替换率预计将从2003年的22%增长到2009年的34%。在这个背景下&#xff0c;Cer…...

如何快速掌握ComfyUI-WanVideoWrapper:AI视频生成从入门到精通

如何快速掌握ComfyUI-WanVideoWrapper&#xff1a;AI视频生成从入门到精通 【免费下载链接】ComfyUI-WanVideoWrapper 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-WanVideoWrapper ComfyUI-WanVideoWrapper 是一款专为ComfyUI设计的强大AI视频生成插件…...

UKF vs EKF实战对比:在ROS和激光雷达数据下,谁对转弯车辆的跟踪更准?

UKF与EKF在ROS激光雷达车辆跟踪中的实战对比&#xff1a;谁更胜一筹&#xff1f; 在自动驾驶和机器人领域&#xff0c;状态估计算法的选择直接影响着系统的感知能力和决策质量。当车辆执行转弯动作时&#xff0c;传统的线性运动模型往往难以准确预测其轨迹&#xff0c;这时就需…...

告别付费电话!手把手教你用Linphone+SIP搭建免费语音视频通话系统(附服务器配置)

零成本构建企业级音视频通信系统&#xff1a;LinphoneSIP全栈实战指南 在远程协作成为主流的今天&#xff0c;企业每年为商业通信软件支付的订阅费用往往高达数万元。我曾为一家20人团队优化通信成本时发现&#xff0c;仅视频会议一项的年支出就超过3万元——而这一切完全可以通…...

告别 Origin 内卷|虎贲等考 AI 科研绘图,一键出期刊级学术图

很多做毕业论文、发期刊、做课题的同学和科研人&#xff0c;都卡在同一个难题上&#xff1a;论文写得再好&#xff0c;却栽在科研绘图上。想用专业软件&#xff0c;Origin、Visio、GraphPad 上手难、参数复杂、调试半天出不来一张合格图&#xff1b;用 Excel、PPT 随手做图&…...

Perplexity ScienceDirect搜索响应延迟超8秒?3种底层协议优化策略+2个隐藏headers参数,实验室实测提速5.8倍

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Perplexity ScienceDirect搜索响应延迟超8秒&#xff1f;3种底层协议优化策略2个隐藏headers参数&#xff0c;实验室实测提速5.8倍 ScienceDirect API 在与 Perplexity 的实时检索链路中常因 TLS 握手冗…...

Google Docs接入Gemini后,这6类高频写作场景效率飙升210%(附可复制Prompt库)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Gemini深度集成Google Docs的底层机制解析 Gemini 与 Google Docs 的深度集成并非简单的 API 调用叠加&#xff0c;而是依托 Google 的统一 AI 基础设施&#xff08;AISI&#xff09;和文档实时协作协议…...

基于LangChain与Ollama构建本地化RAG智能助手:技术栈实践全解析

1. 项目概述&#xff1a;一个本地化AI助手的技术栈实践最近在折腾一个叫“papa-ts”的项目&#xff0c;名字挺有意思&#xff0c;直译过来就是“你的爸爸&#xff08;TypeScript版&#xff09;”。当然&#xff0c;这只是一个项目代号&#xff0c;它的核心目标很明确&#xff1…...