2014-01-15 89 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

指出這是不可能的提及的答案是在同一個頁面上提及'所有者',這是'困難的部分'。 –