【问题标题】:Spring @Value annotationSpring @Value 注解
【发布时间】:2017-01-20 23:15:56
【问题描述】:

我是 Spring 新手,我想知道在 Spring 中使用 @Value 注解的先决条件/条件是什么?

我现在拥有的是一个 Token 类,它具有硬编码的密钥作为字段。我正在尝试做的是将此密钥移动到配置文件以消除硬编码,但由于某种原因以下不起作用。

public class Token {
//...some code

    @Value("${my.secretKey}")
    private String key;

//...some code
}

也许有任何标准技术可以解决这类任务。
感谢帮助!

附言我有 .properties 文件,其中包含 my.secretKey=123 条目。

【问题讨论】:

  • @Reimeus,您能否说明需要提供哪些信息?坦率地说,这几乎是一个包含几个课程的新项目。
  • Token 类的实例是 Spring bean 吗?如果您使用new Token() 自己创建一个新实例,则 Spring 注入不起作用; Spring 无法设置key 变量的值。
  • 如果你自己用new创建对象,那么Spring就没有机会做依赖注入和注入值之类的事情。此类事情仅适用于通过 Spring(Spring bean)创建的对象。
  • 来自doc:“可以使用@Value 将属性值直接注入到您的bean”(这与spring-boot 相同)

标签: java spring spring-mvc


【解决方案1】:

注入依赖项和值仅适用于由 Spring 管理的对象 - 当您使用 new 手动创建对象时,例如通过执行 new Token(),Spring 无法处理该对象以注入依赖项和值。

Token 对象必须是 Spring bean 才能工作。

【讨论】:

    【解决方案2】:

    要使用 @Value 注释,您的 Spring 版本必须是 3.0+

    您必须在 XML 或注解中注册一个静态 PropertySourcesPlaceholderConfigurer bean,以便 Spring @Value 知道如何解释 ${}

    更多信息

    https://www.mkyong.com/spring3/spring-value-default-value/

    【讨论】:

      【解决方案3】:

      一个错误也可能出现在.properties 文件的正确位置。您的.properties 文件位置非常重要。您的 xyz.properties 文件必须放在项目的 src 文件夹中,例如:src/xyz.properties 之后,
      在 XML 配置文件中加载您的属性文件: 档案:applicationContext.xml 添加以下行:

      <context:property-placeholder location="classpath:xyz.properties"/>
      

      此代码应出现在您的 xml 配置文件中的 &lt;context:component-scan .../&gt; 行之后。 现在
      将属性值注入您的 Token 类,它现在应该可以工作了。
      快乐编码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-19
        • 2011-08-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多