2011-11-29 70 views
0

我需要將某些應用程序配置類移至XML。這些類主要有枚舉,其他類使用這些枚舉。這些枚舉在我們的應用程序中被廣泛使用。 舉例來說,我們有類,如如何移至XML配置

enum ColumnType{ 
     type1("Type1"),type2("type2"),type3("type3") 
    } 

此外,我們需要這些類型的實例類。 例如,

Processor p = new StringValueProcessor(ColumnType.type1); 

我如何才能將這個XML文件沒有在我的應用改變了依賴條件?

編輯: 保留這些枚舉並不是強制性的,我不想根據從xml創建的類編譯代碼。配置需要是動態的,這就是轉移到XML的全部要點,以便我們可以用XML配置事物,而不需要編譯和重新部署。 我主要關心的是能夠將所有列類型的實例限制爲一個,並在整個應用程序中使它們可訪問。

編輯:在考慮了更多時間的設計後,我縮小到了兩個基本要求。 1)我會定義一些xml標籤的一些屬性,我需要將其轉換爲對象 2)我還將定義一些標籤(servlet在web.xml中定義的方式),我需要初始化相應的類 3)我會進一步定義一些映射標籤,它將把步驟1)中創建的對象映射到步驟2)中初始化的實例。這應該轉換爲java HashMap,其中可以只有步驟1中定義的對象的一個​​實例),但是對於每個映射,將會有步驟2)中定義的對象的新實例。 有沒有可以提供這種功能的框架?

回答

1

您可以使用XML文件生成枚舉。這必須在編譯/編譯時完成,否則不能像第二個示例那樣在代碼中使用它們(因爲它們在編譯時不存在)

爲什麼要將枚舉遷移到XML?

+0

我們的目標是使應用程序足夠靈活,無需重新編譯和部署即可配置。如果編譯不是一個選項,可能是什麼解決方法?也許我們可以創建這些類型的實例,然後將它們傳遞給像StringValueProcessor這樣的類? – Ashish

+0

你可以動態地做到這一點,然而問題是你不能在編譯的代碼中引用它們(因爲它們在編譯時不存在)而且使用這些「枚舉」的代碼也必須動態編譯。 –

+0

我不必將它們保留爲枚舉。我可以將它們作爲常規類,但我無法理解如何使用這些實例初始化我的類,如何僅保留每個列類型的一個實例並在整個應用中共享它們。 – Ashish

1

我認爲你要找的答案是使用JAXB。它可以讓你把XML轉換成POJO,反之亦然。它甚至有一些使用枚舉的功能。所有你需要做的就是添加一些註釋到你的Java,你可以轉換爲XML。

通過使用註釋,您不會影響任何現有的功能。