我选择采用属性文件来自定义某些设置。
我使用以下代码在一个类中使Properties对象可用
Properties defaultProps = new Properties();
try {
FileInputStream in = new FileInputStream("custom.properties");
defaultProps.load(in);
in.close();
} catch (Exception e) {
e.printStackTrace();
}
我是否必须将其添加到每个类(class)?可能不是因为那时每个类都会为此文件打开一个流。
但是我不确定如何正确处理。
我应该创建一个
MyProperties
类并在需要属性的任何类中实例化它吗?提前致谢!
最佳答案
初始化defaultProps
后,您可以将其内容提供给应用中的其他对象,例如通过公共(public)静态访问器方法,例如:
public class Config {
private static Properties defaultProps = new Properties();
static {
try {
FileInputStream in = new FileInputStream("custom.properties");
defaultProps.load(in);
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static String getProperty(String key) {
return defaultProps.getProperty(key);
}
}
这是最简单的方法,但是它会创建一个额外的依赖项,从而使单元测试更加困难(除非您在
Config
中提供了一种方法来为单元测试设置模拟属性对象)。一种替代方法是将
defaultProps
(或来自它的单个配置值)注入(inject)到需要它的每个对象中。但是,这可能意味着如果调用层次结构很深,则需要向许多方法中添加额外的参数。