如何从一个类到另一个类获取我的配置文件?

时间:2013-02-02 05:07:28

标签: java properties configuration-files

这是一个快速而简单的问题。我有一个程序,有几个类从.properties文件读取信息。更好的做法是将文件从类传递给类作为构造函数中的参数,还是直接在每个类中打开文件?

4 个答案:

答案 0 :(得分:2)

如果您要手动执行此操作,我建议您创建一个配置类,通过构造函数获取文件,并将属性值读取到成员变量中。然后,需要配置的每个其他类通过它的构造函数获取Configuration类。但是,几乎没有人这样做,而是使用像spring这样的框架来处理属性注入。

在春天,它看起来像这样:

<!-- application context xml file -->
<context:property-placeholder location="file:///some/path/to/file" />

然后在你的java类中:

public class SomeClass {
    @Value("${some.property}")
    private String someProp;

    @Value("${some.other.prop}")
    private Integer someOtherProp;

    // ...
}

在应用程序启动时,属性会被注入到您的类中。

答案 1 :(得分:0)

我的建议是让一个Util类加载属性文件,并从该Util获取所需类的值。

注意:我认为您在加载属性文件时没有任何问题。

答案 2 :(得分:0)

我建议你创建一个不可变类,它将文件作为构造函数参数接收并设置所有实例变量。我称之为PropertyConfiguration。然后,由于该类是不可变的,您不必担心将它传递给每个人。你甚至可以拥有一个持有它的类。

例如,下面的代码会让你有一个很好的设置,可以在项目范围内提供一些可用的东西。我只是确保共享的任何内容都是不可变的,以确保线程安全。

public class ClientUtils {

    private static ClientContext _clientContext = null;

    public static void setClientContext(ClientContext cc) {
        _clientContext = cc;
    }

    public static ClientContext getContext() {
        return _clientContext;
    }
}

public class ClientContext {

    private final Configuration _configuration;

    public ClientContext(Configuration config){
        _configuration = config;
    }

    public Configuration getClientContext() {
        return _configuration;
    }

}

答案 3 :(得分:0)

如果您的程序包含的数据不需要是编译的一部分,并且可能因部署而异,您必须将其添加到属性文件中:(例如数据库连接字符串,电子邮件地址)。

万一你需要这个,我正在添加访问属性文件的代码。 将文件放在构建目录中。

Properties properties = new Properties();       
properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("credentials.properties"));