从界面中的属性文件中读取

时间:2011-11-02 12:47:53

标签: java spring java-ee

我想知道是否可以使用java或使用spring messageSource从属性文件初始化接口中的常量,或者这样的事情是不可能的 请指教,谢谢。

5 个答案:

答案 0 :(得分:3)

你可以:

public interface Foo {
    String a = Properties.getProperty("foo"); // public static final by default
}

但是,这意味着Properties.getProperty(..)必须是一个静态方法,它依赖于已经初始化的消息源(静态地再次)。根据您使用的项目和框架,这可能不是最佳选择。

答案 1 :(得分:2)

您可以通过包含final成员的配置初始化bean。由于它是最终的,你可以在构造/初始化期间分配它,然后它是不可变的。

要使用Spring从属性文件进行配置,请查看PropertyPlaceholderConfigurer。这将允许您使用类路径,文件系统,远程服务等中的一个或多个属性文件初始化Spring bean。

答案 2 :(得分:1)

是的,这是可能的:

public static final CONSTANT = System.getProperty("myProperty");

答案 3 :(得分:0)

虽然可以使用一些静态帮助方法(如已经建议的那样),但强烈建议您不要这样做有两个原因:

  1. 这看起来很糟糕。如果需要动态值 - 将其作为界面中的方法。或者直接使用静态帮助器 - 无论如何都需要一个它来使其工作。
  2. 常量可能在编译时内联。在这种特殊情况下不应该发生这种情况 - 编译器只有在能够证明值在执行之间不会发生变化的情况下才应该使用内联,基本上如果用文字初始化它,但它的可能性很小。只要想想它会有多糟糕 - 无论progran在哪个环境中运行,它都会在编译过程中获取一些无用的值,而不是配置的内容。 (这是一个理论上的问题,需要说)。

答案 4 :(得分:-1)

通过阅读下面示例中的属性文件。

int property1;
String otherProperty;
public void loadProperties(File propFile) throws IOException {
    BufferedReader reader = new BufferedReader(new FileReader(propFile));
    String line;
    while ((line = reader.readLine()) != null) {
        if (line.startsWith("Property1=")) {
            property1 = Integer.parseInt(line.substring(10));
        }
        if (line.startsWith("OtherProperty=")) {
            otherProperty = line.substring(14);
        }
    }
}