0

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

4

4 回答 4

2

如果您要手动执行此操作,我建议您创建一个配置类,该类通过构造函数获取文件,并将属性值读入成员变量。然后需要配置的每个其他类都通过它的构造函数获取一个配置类。但是,几乎没有人这样做,而是使用像 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;

    // ...
}

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

于 2013-02-02T05:14:10.343 回答
0

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

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

于 2013-02-02T05:18:36.790 回答
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;
    }

}
于 2013-02-02T05:36:01.197 回答
0

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

以防万一您需要这个,我正在添加用于访问属性文件的代码。将文件拖放到构建目录中。

Properties properties = new Properties();       
properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("credentials.properties"));
于 2013-02-02T05:44:23.423 回答