在java中管理配置(初始配置/保存/加载配置)

时间:2012-12-03 18:02:39

标签: java config preferences

我有一个类似于Config的课程:

public Class Config {

    public static int someIntValue = 0;
    public static String someText = "some text";

}

我现在要做的是保存并加载该配置,如果不需要加载另一个配置,还有初始配置。所以配置可以在程序中的任何一点改变。

我想出的是像Singelton一样的模式

public Class Config {

    public static Config instance;

    private int someIntValue = 0;
    private int String someText = "some text";

    public static Config getInstance(){
    if(instance == null)
    instance = new Config();
    return instance;
    }

    public void setInstance(Config config){
    this.instance = config;
    }
    //getter/setter
    ...

}

但最后它看起来不是最好的方法,我对它不太满意:/ 也许你们可以帮助我解决常见的"最佳实践"这样做的方法。

最诚挚的问候 由

3 个答案:

答案 0 :(得分:1)

我只想使用java.util.Properties,或者使用它的一些包装器。另一个好的方法是java bean,比如xstream来保存/加载东西。

答案 1 :(得分:0)

通常在Java中用于配置使用属性文件。然后使用ResuorseBundle读取属性。

你的“单身人士”不是传统意义上的单身人士。 1)字段实例必须是私有的 2)删除SetInstance方法 3)你应该让你的单身人士线程安全。

答案 2 :(得分:0)

如果您考虑避免在java.util.Properties周围编写样板代码,您可以查看为您执行此操作的内容:OWNER API

它可以配置为定制您的需求,与java.util.Properties(阅读文档)相比,它提供了一些额外的简洁功能。

实施例。您可以使用配置参数定义接口:

public interface ServerConfig extends Config {
    int port();
    String hostname();
    @DefaultValue("42")
    int maxThreads();
    @DefaultValue("1.0")
    String version();
}

然后你就这样使用它:

public class MyApp {
    private static ServerConfig cfg = ConfigFactory.create(ServerConfig.class);
    private MainWindow window;

    public MyApp() {
       // you can pass the cfg object as dependency, example:
       window = new MainWindow(cfg);
    }

    public void start() {
       window.show();
    }

    public static void main(String[] args) {
       // you can use it directly,  example:
       System.out.println("MyApp version " + cfg.version() + " copyright (c) ACME corp.");
       MyApp app = new MyApp();
       app.start();
    }
}

您可以将cfg对象定义为所需类的成员实例,也可以将实例传递给您需要的构造函数和方法。

版本1.0.4即将发布,它还将包括“热重载”和许多改进。