我的问题与this one相同,除了它适用于Java,特别是应用于属性。理想情况下,我想创建一个Properties实例,并从所有类调用方法而不创建新实例。我还想从单个属性实例中读取,因此我只有一个事实来源。
我已阅读API for Properties并且它没有回答我的问题。
This question表示我需要在类构造函数中包含引用。还有更好的方法吗?
答案 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());
}