2014-01-15 90 views
1

涉及到:this question类型安全“基于schem”* Java *的分层*配置读/写库?

我想要类型安全的前端配置文件。

建议在提及的职位OWNER Project。这看起来是一个很好的解决方案 - 你只需要提供带注释的界面,剩下的就是框架词。

问题是该项目不支持分层配置,并且从项目站点看来它不会很快。

任何类似的项目都支持这个吗?

编辑 我正在寻找的东西,让我访问的值等:

config.getHost(); 

代替:

config.get("host"); 
+0

我不排除代码生成 - 虽然我宁愿避免它。 –

回答

1

我不知道你有什么请牢记,但您可以使用YAML进行配置,并且可以将数据“反序列化”为您选择的数据结构。即Java对象都是安全的。请参阅Snake YAML恕我直言YAML是最适合作为文本的分层数据。

+0

我编辑了这个问题。希望它更清晰。 –

+1

@OphirYoktan你可以使用YAML构建一个数据结构,而不需要注释或者甚至是getter。 –

1

你可以试试IoC容器。例如。在吉斯这将是:

class MyClass 
{ 
    @Inject @Named("host") String host; 
    @Inject @Named("port") int port; 
} 

或自定义注释:

class MyClass 
{ 
    @Inject @Host String host; 
    @Inject @Port int port; 
} 
+0

听起来很有趣。你有没有参考使用guice作为配置文件的更详细的解释? –

+0

@OphirYoktan一个思维转换的变化是从您的bean中删除'config',配置参数被注入到一个bean中,而不是由一个来自全局'config'位置的bean所请求的,将依赖关系解耦。有一个guice配置模块来绑定特定注释与来自不同来源(环境变量,属性文件,数据库,xml配置等)的值。开始寻找这里:http://code.google.com/p/google-guice/wiki/FrequentlyAskedQuestions。 – kan

+0

@OphirYoktan而且想得更简单。你为什么需要分级配置?你可以用更简单的解决方案来实现它。例如。只需在包名后面命名参数,例如'com.my.app.some.host','com.my.app.some.port'。 – kan

1

不太清楚,如果这是要你的意思类型安全的,但commons-configuration支持多种类型安全的get方法,如

Double double = config.getDouble("number"); 
List<Object> buttons = config.getList("buttons.name"); 

commons-configuration还支持hierarchical properties

编辑:没有看到您的编辑,对不起。 有关相关问题,请参阅Bozhos answer

+0

指出这是不可能的提及的答案是在同一个页面上提及'所有者',这是'困难的部分'。 –