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