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

我有一个类看起来像这样的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 ... } 

但最终它看起来不是最好的方法,我对它不太满意:/也许你们可以用通常/“最佳实践”的方式帮助我做到这一点。

最诚挚的问候

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

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

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

如果你考虑避免在java.util.Properties周围编写样板代码,你可以看看为你做的事情: OWNER API 。

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

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

 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即将发布,它还将包括“热重载”和许多改进。