跨类提供Java属性?

tzi*_*ppy 11 java properties

我选择使用属性文件来自定义某些设置.我使用以下代码在类中提供属性对象

Properties defaultProps = new Properties();
    try {
        FileInputStream in = new FileInputStream("custom.properties");
        defaultProps.load(in);
        in.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
Run Code Online (Sandbox Code Playgroud)

我是否必须将此添加到每个班级?可能不是因为那时每个类都会打开一个流到这个文件.但我不确定如何妥善处理这个问题.我应该创建一个类MyProperties并在任何类需要属性中实例化它吗?

提前致谢!

Pét*_*rök 12

初始化后defaultProps,您可以将其内容提供给应用程序中的其他对象,例如通过公共静态访问器方法,例如:

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);
  }
}
Run Code Online (Sandbox Code Playgroud)

这是最简单的方法,但它会创建一个额外的依赖项,这会使单元测试更加困难(除非您提供一个方法Config来设置单元测试的mock属性对象).

另一种方法是将defaultProps(或其中的单个配置值)注入到需要它的每个对象中.但是,这可能意味着如果您的调用层次结构较深,则需要在许多方法中添加额外的参数.