1

我的代码的目的是从 *.properties 文件中加载一些设置值,以便我以后可以在我的代码中的一些 if 语句中使用这些值。我想加载一些列表结构,但是因为这看起来很难,所以一个数组就可以了。我还没有真正做到这一点,因为我被困在从属性文件中加载一个字符串的小事上。

当我尝试调试使用某些弹簧特定数据的代码时。我得到了一些有趣的行为,指向断点正上方的代码中的定义让我知道变量值为空。

@Value(value = "${ViewableReportFilter.allStates.verify}")
String verifyStringStates;

public ViewableReportFilter() {
    viewStates = null;
    log.debug("Read in properties for states: verify:" + verifyStringStates);

     /*BREAKPOINT HERE*/

在我的 my.properties 文件中:

ViewableReportFilter.allStates.verify=ONHOLD

我的配置使用属性文件:

<context:property-placeholder location="classpath:properties/my.properties" order="1" ignore-unresolvable="true" />
4

3 回答 3

0

尝试使用这个:

@Value(value = "${allStates.verify}")

在您的财产 my.properties 中:

allStates.verify=ONHOLD

于 2013-10-26T08:22:11.467 回答
0

更新了构造函数,并添加了 Autowire 注释。属性文件没有变化,没有 XML。

String arrayOfStrings;

@Autowired
public ViewableReportFilter(
        @Value("${TMSViewableReportFilter.allStates.verify}") String[] verifyStringStates) {
        arrayOfStrings = verifyStringStates;


public logViewableReportFilter() {
    log.debug("Read in properties for states: verify:" + arrayOfString);
}
于 2013-10-25T15:52:49.963 回答
0

在创建对象之前,Spring 无法设置对象的字段。Spring 做的第一件事是使用反射来实例化你的类。它将根据上下文使用Class#newInstance()或使用。Constructor#newInstance()只有当构造函数完成工作并返回时,Spring 才能再次使用反射设置字段的值。

另一种方法是将带@Value注释的参数放在构造函数参数列表中,并根据 Spring 提供的参数在构造函数中设置字段。

public ViewableReportFilter(@Value String verify) {
    this.verifyStringStates = verify;
    ...

浏览其 IoC 容器的Spring 文档。它详细解释了所有这些。

于 2013-10-25T12:55:47.090 回答