news 2026/8/14 1:19:14

Spring MVC 项目中使用 @Value 注解读取 Properties 配置的完整指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Spring MVC 项目中使用 @Value 注解读取 Properties 配置的完整指南

问题背景

最近在 Spring MVC 项目中集成邮件发送功能时,遇到了通过@Value注解从*.properties文件读取配置值的问题。在单元测试junit中可以正常获取,但在业务代码中却获取到null

解决方案:使用 @Value 注解读取配置

Spring 除了传统的 XML 配置方式外,还可以通过@Value注解来获取*.properties文件中的配置值。

1. 配置实体类

@Value注解需要 Spring 的注解扫描支持,因此需要在 Spring 配置中扫描实体类所在的包,并在实体类上添加@Component注解。

@Component public class MailBean { // 实体类添加 @Component,让 Spring 扫描并管理,默认单例模式 // 功能:从 data.properties 资源文件中读取邮件配置 @Value("#{configProperties['emailhost']}") private String emailHost; @Value("#{configProperties['emailform']}") private String emailFrom; @Value("#{configProperties['emailname']}") private String emailUsername; @Value("#{configProperties['emailpassword']}") private String emailPassword; // Getter 方法 public String getEmailHost() { return emailHost; } public String getEmailFrom() { return emailFrom; } public String getEmailUsername() { return emailUsername; } public String getEmailPassword() { return emailPassword; } }

2. Spring 配置文件

applicationContext.xml中配置组件扫描和属性文件加载:

<!-- 自动扫描 com.myweb 包,将带有注解的类纳入 Spring 容器管理 --> <context:component-scan base-package="com.myweb"></context:component-scan> <!-- 引入配置文件 --> <bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> <property name="locations"> <list> <value>classpath:data.properties</value> <value>classpath:application.properties</value> </list> </property> </bean> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer"> <property name="properties" ref="configProperties" /> </bean>

3. 属性文件配置

data.properties文件内容:

emailhost=邮箱的网关 emailname=你的用户名 emailpassword=你的密码 emailform=发件邮箱 // 具体值需根据自身情况配置

问题现象与排查

单元测试正常

通过 JUnit 测试可以正常获取配置值:

@Test public void test() { ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext.xml"); MailBean connInfo = appContext.getBean(MailBean.class); System.out.println(connInfo.getEmailHost()); System.out.println(connInfo.getEmailFrom()); System.out.println(connInfo.getEmailUsername()); // 可以正常获取 }

业务代码中获取 null

但在具体业务代码中使用时,获取到的却是null

问题原因与解决方案

问题原因

在业务代码中,仍然使用new MailBean()来创建对象。但MailBean已经通过@Component注解加入了 Spring 容器的管理,并且默认是单例模式。直接new创建的对象不会被 Spring 管理,因此@Value注解不会生效。

正确做法

在业务类中通过依赖注入的方式获取MailBean实例:

@Resource private MailBean mailBean;

同时,业务类本身也需要交给 Spring 管理(添加相应的注解,如@Controller@Service@Repository@Component)。

在 JUnit 测试中,通过appContext.getBean(MailBean.class)获取的是 Spring 容器管理的 Bean,所以能正常取值。在业务代码中,必须通过@Resource@Autowired注入,否则无法获取到正确的 Bean。

常见警告及处理

在 Spring 配置文件中添加上述配置时,可能会遇到以下警告:

警告:Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKey ...

该警告是由于写入注册表时权限不足引起的。解决方法:

  1. 打开命令窗口,输入regedit打开注册表管理器
  2. 导航到HKEY_LOCAL_MACHINE\Software\JavaSoft\
  3. JavaSoft下创建Prefs项即可

总结

通过@Value注解读取*.properties配置时需要注意:

  1. 实体类需要添加@Component等 Spring 管理注解
  2. Spring 配置中需要扫描实体类所在的包
  3. 在业务代码中必须通过依赖注入获取 Bean,不能直接new创建
  4. 遇到注册表权限警告时,手动创建相应的注册表项即可解决
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/14 1:18:21

大模型选型实战指南:从需求分析到模型部署的完整决策流程

1. 项目概述&#xff1a;从“能用”到“好用”的跨越上次我们聊了聊大模型&#xff08;LLM&#xff09;到底是什么&#xff0c;以及它能帮你做什么。相信你已经对ChatGPT、Claude这些名字不再陌生&#xff0c;甚至可能已经上手玩过几把。但问题很快就来了&#xff1a;当你真的想…

作者头像 李华
网站建设 2026/8/14 1:18:17

高校智慧交通实验室核心设备体系与选型指南

一、核心必配设备四大板块&#xff08;一&#xff09;车路协同微缩沙盘及实景硬件作为实验室的实体核心载体&#xff0c;该板块可高度还原真实交通场景&#xff0c;全面适配基础实训教学与科研成果演示需求。核心配置包含可定制尺寸的模块化智能交通实体沙盘基座&#xff0c;覆…

作者头像 李华
网站建设 2026/8/14 1:18:00

写论文不用硬扛✨被OKBIYE温柔治愈的整个毕业季

一、写论文的疲惫&#xff0c;只有毕业生自己懂 回望整个毕业论文阶段&#xff0c;最让人疲惫的从来不是写不出字&#xff0c;而是无尽的内耗与焦虑。 熬夜找文献、反复改查重、对着错乱的格式发呆、写完又担心AI痕迹超标、怕论文泄露、怕导师返修、怕自己努力很久还是达不到…

作者头像 李华
网站建设 2026/8/14 1:17:56

软件世界的“智能保镖”:微软 Project Perception 与安全大模型深度拆解

最新内容 微 信 搜索 公 众 号 网 络 研 究 观在今天的数字世界里&#xff0c;网络攻击的形态已经发生了根本性的改变。过去&#xff0c;黑客主要依靠人工编写脚本和工具来寻找软件漏洞&#xff1b;而如今&#xff0c;网络攻击正全面跨入“黑客 AI 化”甚至“全自动自主攻击”的…

作者头像 李华
网站建设 2026/8/14 1:12:19

Windows HEIC缩略图插件终极指南:5分钟解决iPhone照片预览难题

Windows HEIC缩略图插件终极指南&#xff1a;5分钟解决iPhone照片预览难题 【免费下载链接】windows-heic-thumbnails Enable Windows Explorer to display thumbnails for HEIC/HEIF files 项目地址: https://gitcode.com/gh_mirrors/wi/windows-heic-thumbnails 你是否…

作者头像 李华
网站建设 2026/8/14 1:12:14

面向对象中的组合、聚合与继承关系详解

在面向对象编程&#xff08;OOP&#xff09;与 UML 类图设计中&#xff0c;类与类之间存在多种静态结构关系&#xff0c;其中组合、聚合、继承是最核心的三类关系&#xff1a;继承描述 “类型从属” 的层级关系&#xff0c;聚合与组合描述 “整体 - 部分” 的组装关系&#xff…

作者头像 李华