【问题标题】:Spring Property Injection in a final attribute @Value - Java最终属性@Value中的Spring属性注入-Java
【发布时间】:2011-10-31 02:52:55
【问题描述】:

关于从属性文件中为最终属性注入 Spring 的一个简单问题。

我有一个属性文件,我想在其中存储一个文件路径。通常,当我使用属性文件时,我会使用以下内容设置类属性:

private @Value("#{someProps['prop.field']}") String someAttrib ;

然后在我的spring.xml 中我会有类似的东西:

<util:properties id="someProps"   
    location="classpath:/META-INF/properties/somePropFile.properties" />

这很好用,很简单,使代码美观整洁。但是我不确定在尝试将属性值注入最终类属性时使用的最简洁的模式是什么?

显然是这样的:

private static final @Value("#{fileProps['dict.english']}") String DICT_PATH; 

不会工作。还有其他方法吗?

【问题讨论】:

  • 不,这两种方法不兼容。

标签: java spring dependency-injection properties properties-file


【解决方案1】:

如果你正在寻找一个例子,这里是一个:

public class Test {
    private final String value;

    public Test(@Value("${some.value}") String value){
        this.value=value;
        System.out.println(this.value);
    }
}

【讨论】:

  • 你打算如何初始化这个类?您是将其注释为 Component 并让容器执行此操作还是以任何其他方式?
  • 使用@Component 注解或其他任何原型都可以使用
  • 知道如何在静态属性中做同样的事情吗?
  • 你不能。您只能通过两种方式初始化静态最终属性。在静态块或声明语句中。 static { STATIC_VARIABLE = "value";} 或 private static final String FOO = "bar"
【解决方案2】:

将值注入最终字段的唯一方法是通过Constructor Injection。在 Spring 方面,其他一切都将是一个可怕的黑客攻击。

【讨论】:

  • 有这样的例子吗?
猜你喜欢
  • 2013-01-15
  • 2022-06-22
  • 2011-09-19
  • 1970-01-01
  • 2016-06-05
  • 2021-01-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多