使用Spring和注释@Value注入属性

haj*_*aju 12 java spring dependency-injection

我试图将属性文件加载到Spring bean中,然后将该bean注入到类中.

我无法工作的唯一部分似乎是使用@Resource参考.有人可以为我连接最后一块吗?我每次都得到一个空值.似乎不想注入价值.

[编辑] - 我原本以为使用@Resource是最好的方法,但我发现的解决方案更容易.

我在另一篇文章中看到这个解决方案

参考解决方案链接:将 属性值注入Spring - 由DON发布

感谢Don的帖子,但我不知道如何用@Resource完成它.

调试结果: 变量值appProperties始终为null.它没有被注射.

Spring Config. 在此输入图像描述

样品类:

package test;

import java.util.Properties;
import javax.annotation.Resource;


public class foo {
    public foo() {}
    @Resource private java.util.Properties appProperties;
}
Run Code Online (Sandbox Code Playgroud)

基于以下批准的解决方案中的建议.以下是我所做的更改.


解决方案更新

弹簧配置: 在此输入图像描述

Java类: 在此输入图像描述

aba*_*ogh 17

为了使你的解决方案工作,你还需要使foo成为一个Spring托管bean; 因为否则Spring会如何知道它必须处理你班上的任何注释?

  • 您可以在appcontext xml中将其指定为bean with ..class="foo"
  • 或者使用component-scan并指定包含您的foo类的基础包.

因为我不完全确定这正是你想要的(你不想让一个.properties 文件被Spring解析并且它的键值对可用而不是一个Properties对象?),我建议你另一个解决方案:使用util命名空间

<util:properties id="props" location="classpath:com/foo/bar/props.properties"/>
Run Code Online (Sandbox Code Playgroud)

并引用bean内部的值(也必须是Spring管理的):

@Value("#{props.foo}")
public void setFoo(String foo) {
    this.foo = foo;
}
Run Code Online (Sandbox Code Playgroud)

编辑:

刚刚意识到你org.springframework.context.ApplicationContext在课堂上进口可能是不必要的.我强烈建议您至少阅读前几章的Spring参考资料,因为a)这是一个很好的阅读b)如果基础知识清楚,你会发现Spring更容易理解.

  • 如果你真的需要点,那么请使用id [key]表示法.例如:app.billing.orderform = myorderform然后使用say appProps设置属性id.所以@Value变成@Value("#{appProps ['app.billing.orderform']}")我知道,丑陋不是它. (2认同)