簡體   English   中英

如何使用Java屬性文件定義對象並設置對象的屬性?

[英]How to use Java properties file to define objects and set the properties for the object?

我正在開發一個Java程序,該程序可以從各種來源檢索數據,對數據進行處理,然后將數據發送到各種目的地。 我需要允許用戶在屬性文件中定義數據源,數據目標以及程序中用於處理數據的模塊。

我設想屬性文件看起來類似於以下內容...

dataFlow1 = dataProcessorTypeA
dataFlow1.source = mySource1
dataFlow1.destination = myDestination1
dataFlow2 = dataProcessorTypeA
dataFlow2.source = mySource2
dataFlow2.destination = myDestination2
dataFlow3 = dataProcessorTypeB
dataFlow3.source = mySource3
dataFlow3.successDestination = mySuccessDestination3
dataFlow3.failureDestination = myFailureDestination3
...
dataFlow99 = dataProcessorTypeZ

與每個數據流關聯的屬性將取決於所選的模塊。 因此,在上面的示例中,“ dataProcessorTypeA”需要設置“ source”和“ destination”屬性,而“ dataProcessorTypeB”需要設置“ source”,“ successDestination”和“ failureDestination”屬性。 在示例“ dataProcessorTypeA”,“ dataProcessorTypeB”和“ dataProcessorTypeZ”將是程序內的類。

過去,我曾使用屬性文件來進行簡單的“屬性=值”類型配置,但我不了解如何實現這種類型的配置,或者應該使用哪些詞在Google上搜索以查找與我類似的示例正在努力實現。 我還想避免將大量邏輯硬編碼到程序中讀取屬性文件,因為將來可能會添加新模塊。 我假設這將類似於使用getter和setter配置JavaBean的方式。

我要實現的目標類似於用戶可以通過在log4j屬性文件中設置以下內容來配置Apache log4j以使用多個追加程序的方式...

log4j.appender.ca=org.apache.log4j.ConsoleAppender
log4j.appender.ca.layout=org.apache.log4j.PatternLayout
log4j.appender.rfa=org.apache.log4j.RollingFileAppender
log4j.appender.rfa.File=example.log

我查看了log4j中的PropertyGetter.java文件,可以看到它利用了反射和自省,但是我對這些概念沒有足夠深入的了解以了解正在發生的事情。

我不明白的是如何將“ log4j.appender.ca”創建為對象,配置為使用org.apache.log4j.ConsoleAppender,然后在處理日志時log4j如何知道尋找“ log4j.appender.ca”消息。 我的問題與log4j並沒有真正的關系,但是我用來說明我希望在自己的程序中實現的類型配置的類型。

Apache Shiro還提供了一種類似的機制,允許用戶自定義框架的運行方式。 我已經瀏覽了Shiro中的ReflectionBuilder.java文件,可以看到正在使用Commons-BeanUtils庫,但是我對理解代碼中正在發生的事情有點不了解。

因此,總而言之,我的問題是,有人可以讓我更好地了解諸如log4j和Shiro之類的框架如何執行這種類型的配置,或者就我應該搜索的內容給我一些指導嗎?

在這里看一看,並與Properties類一起使用。

使用Class.forName()您可以找到一個具有完全限定名稱的類。

無需框架:使用StringTokenizer(propertyname,“。”),然后每個令牌代表嵌套映射的一個級別,除了last / leaf是值。

這是由處理

Map<String,Map<String,..>>

因此,“ dataflow1”是第一級映射中的鍵,其值“ source”和“ destination”位於級別2,然后是“ source1”和“ destination1”的葉/數據值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM