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

发布时间:2026/10/2 15:40:51
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-packagecom.myweb/context:component-scan !-- 引入配置文件 -- bean idconfigProperties classorg.springframework.beans.factory.config.PropertiesFactoryBean property namelocations list valueclasspath:data.properties/value valueclasspath:application.properties/value /list /property /bean bean idpropertyConfigurer classorg.springframework.beans.factory.config.PreferencesPlaceholderConfigurer property nameproperties refconfigProperties / /bean3. 属性文件配置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 ...该警告是由于写入注册表时权限不足引起的。解决方法打开命令窗口输入regedit打开注册表管理器导航到HKEY_LOCAL_MACHINE\Software\JavaSoft\在JavaSoft下创建Prefs项即可总结通过Value注解读取*.properties配置时需要注意实体类需要添加Component等 Spring 管理注解Spring 配置中需要扫描实体类所在的包在业务代码中必须通过依赖注入获取 Bean不能直接new创建遇到注册表权限警告时手动创建相应的注册表项即可解决

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询