我选择采用属性文件来自定义某些设置。
我使用以下代码在一个类中使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)到需要它的每个对象中。但是,这可能意味着如果调用层次结构很深,则需要向许多方法中添加额外的参数。

10-07 12:25
查看更多