java - java中的过滤属性

标签 java properties

我有一个使用一些 .properties 文件的 java 程序。它根据运行时传递的参数(模式)选择要使用的属性文件。 例如,当程序在 mode:a 下运行时,它使用 a.properties 文件,而当 mode:b 时,它将使用 b.properties文件等 我想将所有这些属性文件合并到一个 common.properties 中,并使用不同的命名空间。例如,在 common.properties 中我将拥有:

a.url = aaa
a.ip = aaa.aaa.aaa.aaa
b.url = bbb
b.ip = bbb.bbb.bbb.bbb

现在,我在主方法中实例化属性对象,并将其传递给需要从属性中读取某些内容的其他对象/方法。但是现在我已经组合了属性,我必须传递模式:或者 b ,以便他们知道应该提取哪一组属性。 有没有更好的方法在 main 方法中创建属性文件的过滤实例,然后以这些对象不知道模式的方式将其传递给其他对象:a 或 b,并且只需查询属性对象的 url和 ip(不是 a.url 或 a.ip)

最佳答案

不要将 Properties 对象传递给其他方法/对象。它太低级了,尤其是现在您必须处理这个命名空间的事情。将属性封装在专用对象(我们称之为“配置”)内,并传递此配置对象。

public class Configuration {
    private String mode;
    private Properties properties;

    public Configuration(String mode, Properties properties) {
        this.mode = mode;
        this.properties = properties;
    }

    public String get(String key) {
        return properties.getString(mode + "." + key);
    }
}

您甚至可以将此 Configuration 对象的契约提取到一个接口(interface)中,并使所有对象都依赖于该接口(interface)而不是具体的 Configuration 类,这将有助于

  • 如果需要,可以稍后更改配置策略(如果您从一开始就这样做了,那么现在就不必更改所有对象中的任何内容)
  • 模拟单元测试中的配置,使其返回您想要的内容。

关于java - java中的过滤属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6512306/

相关文章:

java - 为什么我没有 InputManager.getInstance()?和注入(inject)输入事件()?

c# - 使用反射查找通用列表元素的继承属性

java - 性能调整、检测和页面错误

java - 为什么不能用 Java 实现泛型数组?

java - 如何覆盖Spring Boot属性?

objective-c - 如何用更具体的类型覆盖父类(super class)的属性?

javascript - 我可以在对象原型(prototype)(方法)中定义属性吗?

ant - 可选的 Ant arg

java - 可执行 jar 无法正常启动

java - 如何使用动态名称访问 session 属性?