尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
@Value 只认容器,new 出来的对象拿不到值
这个坑是在导数据的时候撞上的。测试环境的订单表要灌数一万两千条走到八千多行程序没声了。日志里刨出来这么一行java.lang.NullPointerExceptionat 往后的帧全是业务包名我就不抄了。栈指到的代码长这样String path tmpPath /upload;tmpPath 这个字段头顶是有注解的Value(${file.tmp.path}) private String tmpPath;说实话我当时头一个念头就是配置写漏了。翻出 application.yml 一看这个 key 躺得好好的 测试环境里那份也一模一样 本地的单测也没报错。折腾了半个钟头我才盯着调用方那一行ExcelHelper helper new ExcelHelper();就这么个写法。在我原来的印象里Value 属于编译阶段就完成赋值的那类注解。事实正相反容器把 bean 造好之后才有回填这一步 把配置值写进字段。bean 这词听着玄说白了就是容器替你创建、也替你持有的对象。对象要是你自己 new 出来的容器管不着 回填这步自然没有字段维持 Java 默认初值引用类型就是 null。本地单测为什么是绿的用的实例来自容器Autowired private ExcelHelper helper;类还是同一个类只换了获取方式一边有值一边为空。版本是 Spring Boot 2.1.6这里真不怪版本 要怪就怪对象来路不对。这种实例现场有没有快办法认出来我试过看日志。思路一打一行看类名尾巴有没有 CGLIB 那串东西。 CGLIB 是 Spring 生成代理类用的工具经它手的类名会变长。这条路走死了类上没挂任何 AOP 容器发下来的实例类名干干净净和 new 出来的看不出区别。思路二数构造日志出现几次public ExcelHelper() { log.info(ExcelHelper init); }在容器里它是单例一个进程只飘一行。 谁在偷偷 new每调一次多一行谁干的立刻现形。顺带把界限划清容易混的一共有两处。先看 final我起初也把它归进同一个坑后来证伪了。既不给初值、构造函数里也不赋值编译这关就过不去 javac 会先拦下来FinalBlank.java:2: error: variable tmpPath not initialized in the default constructor连编译都过不了null 根本拿不到防它属于多余。再看 static。我只敢确定一点 类根本没被容器收管时它和实例字段一个待遇没人赋值null 到底。如果是容器里的 bean 往静态字段写值我没验过。 网上那种把 static 说成一律不可注入的绝对话我不敢全收。还有一处容易误会${key}想带默认值关键在冒号。Value(${file.tmp.path:}) Value(${file.tmp.path:/data})冒号后头什么都不写也算给了值是空字符串。要是冒号也省了、配置偏偏缺这种最好查启动直接报Could not resolve placeholder file.tmp.path进程根本起不来轮不到跑数据时才炸。 真正吓人的是没进容器那一类一点动静都不给。后来数据我重新灌了一次把八千行之后的缺口补齐。tmpPath 这一劫总算过去了。头疼的是测试环境路径改一下服务就得重启 一次七八分钟起不来到现在没人接这个活。
RELATED

相关推荐

思维链搜索空间的宽度与深度剪枝:基于局部熵阈值的动态截断算法

思维链搜索空间的宽度与深度剪枝:基于局部熵阈值的动态截断算法

自回归模型在长思维链(Chain of Thought, CoT)推理过程中,每一个推理步骤的展开都会引发假设空间的指数级膨胀。当大模型面对极其复杂的数学定理证明、竞赛级算法推导或长多跳逻辑推理时,未经受控的自由发散往往导致两种病态极端&…

📅 2026/10/11 10:51:23
Nexting参考固件移植教程:一套Zephyr代码如何跑通nRF52840与ESP32四块开发板

Nexting参考固件移植教程:一套Zephyr代码如何跑通nRF52840与ESP32四块开发板

【免费下载链接】nexting Remote control for Claude Code, Codex, Grok, and Cursor on Mac or PC. View sessions, send tasks, and drive them remotely from your phone, PIN, or Ring. OpenClaw supported. 项目地址: https://gitcode.com/gh_mirrors/ne/nexti…

📅 2026/10/11 10:51:23
安卓原生对接苹果cms后端:接口解析、播放器接入与踩坑实战

安卓原生对接苹果cms后端:接口解析、播放器接入与踩坑实战

简介:这是一份面向苹果CMS影视站开发者与二次开发者的安卓原生APP后端源码包,由最新优化版前端App与Feiapp后端组成,用于快速搭建对接苹果CMS的移动端视频应用。包内含后端PHP接口、前端App工程资源、主题样式及数据库相关文件,共…

📅 2026/10/11 10:51:23
MORE NEWS

更多资讯

📰

自制无人机视角小目标检测数据集:VOC/YOLO/COCO格式转换与增强实战

简介:面向无人机视角小目标检测的研究者与毕业设计、课程设计使用者,这是一份自制车辆行人检测数据集,包含548张真实场景图像,背景丰富且非单一连续帧。标注涵盖轿车、摩托车、行人、三轮车、货车、自行车、遮阳三轮车、忽略区域、…

📰

DataX db2writer 插件:DB2 批量写入与数据迁移实战

简介:本资源为DataX数据迁移插件DB2Writer的完整实现包,面向需要将数据高效写入IBM DB2数据库的开发者与数据工程师,尤其适合金融、电信等企业级数据同步场景。DB2Writer支持全量迁移、基于时间戳或自增ID的增量迁移、多线程并行写入以及错误…

📰

Linux下NVMe SSD故障诊断与数据抢救实战指南

1. 项目概述:这不是一次简单的硬盘更换,而是一场对存储底层逻辑的重新校准Homelab NVMe 修复记录——这七个字背后,藏着一个非常典型的个人实验室运维现场:没有厂商SLA保障、没有专职运维团队、没有冗余热备盘,但偏偏又…

📰

LLM Internals 交叉熵损失函数详解:GPT 训练背后的核心数学,为什么取负对数?

【免费下载链接】llm-internals Learn LLM internals step by step - from tokenization to attention to inference optimization. 项目地址: https://gitcode.com/gh_mirrors/ll/llm-internals 点击查看 免费下载 交叉熵损失函数(Cross-Entropy Loss&…

📰

让Claude用给5岁小孩讲故事的方式解释任何技术概念:ELI5技能完整入门指南

AI 技能/插件AI 评测人工智能 【免费下载链接】ELI5 ELI5 — A Claude Code skill that explains anything to anyone: kids, managers, engineers, parents. Adapts tone, vocabulary, and analogies to match the audience. 项目地址: https://gitcode.com/gh_mir…

📰

恶劣天气三维重建:3D高斯Splatting雨雾场景全流程解析

简介:面向恶劣天气下室外场景三维重建的项目包,基于高斯Splatting算法实现,解决雨、雾、雪等天气干扰导致重建精度下降的问题。包内包含完整源码与流程教程,覆盖数据采集、模型训练、渲染到评估全流程,适合计算机视觉研…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬