跨多个类使用属性

时间:2017-09-13 07:08:00

标签: java class properties multiple-instances

我的问题与this one相同,除了它适用于Java,特别是应用于属性。理想情况下,我想创建一个Properties实例,并从所有类调用方法而不创建新实例。我还想从单个属性实例中读取,因此我只有一个事实来源。

我已阅读API for Properties并且它没有回答我的问题。

This question表示我需要在类构造函数中包含引用。还有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

让我们以系统属性为例。在此实现http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/System.java#System.getProperty%28java.lang.String%29中,属性仅存储在静态类属性中。将此属性设置为public或创建公共访问器方法。简短回答:让它静止不动。

如果事情变得有点复杂,您可以使用静态初始化器初始化静态数据。 (https://docs.oracle.com/javase/tutorial/java/javaOO/initial.html

答案 1 :(得分:0)

fisrt链接,“this one”是Oracle文档的链接......

如果您只想加载一次属性,则应使用 singleton 模式。但请注意,此模式可能是反模式,可能会使您的单元测试更复杂。

为了避免这些缺点,最好通过构造函数将引用传递给属性。

/* This is your singleton. It takes care of loading the properties only once and can delegate access method  to it */
public class Configuration {
   private static Configuration instance; // created only once
   public static getInstance() {
      instance = // Read the Singelton pattern to create it only once   
   }


   private Properties properties; // loaded only once

   public String get(String key) {
       return properties.getProperty(key);
   }

}

public class Component {
    private final Configuration cfg;
    public Component (Configuration cfg) {
        this.cfg = cfg;
    }
}

public class StarterOrDiContainer {
    // ..
    Component component = new Component(cfg.getInstance());
}