2016-05-25 78 views
0

我目前正在設計一個應用程序配置。 該應用程序將利用Spring,它的可能只使用它的XML bean上下文配置,但要求被設置爲在其旁邊有一些分層的XML配置。這將使用applicationContext中指定的bean。連接到Bean配置的分層配置

例如,給定下列:

的applicationContext.xml:

<bean id="A" class="" init-method=""> 
    <property name="namespace" value="${namespace}"/> 
</bean> 

<bean id="B" class="" init-method=""> 
    <property name="restTemplate" ref="restTemplate"/> 
</bean> 

config.xml中

<configuration> 
    <consumers-config> 
     <consumers> 
      <!--A consumer should be first defined in another configuration file--> 
      <consumer bean-name="A"> 
       <name>A-1</name> 
       <namespace>...</namespace> 
      </consumer> 
      <consumer bean-name="B"> 
       <name>B-1</name> 
      </consumer> 
     </consumers> 
    </consumers-config> 
    <works> 
     <work name="1"> 
      <consumers> 
      <consumer>A-1</consumer> 
      <consumer>B-1</consumer> 
      </consumers> 
     </work> 
    </works> 
<configuration> 

正如可以從上面看到的, config.xml引用了很多applicationContext,有效地使後者成爲依賴關係

需要進行分層配置是爲了允許用戶修改這些配置,而不需要觸摸applicationContext。

這是理想情況嗎?我應該考慮哪些最佳實踐?換句話說,解決這個問題的最好方法是什麼?

+1

我不知道這是否是最好的方法,因爲我不明白分層配置的要求。可能你可以使用Spring配置文件來創建一些泛型和特定的bean層次結構 –

+0

我從來沒有使用過彈簧配置文件,我會研究它......但我仍然希望用戶只修改分層xml配置而不是applicationContext .XML。你認爲允許用戶修改applicationContext是個好主意嗎? – LoreV

+1

我認爲你正在構建的是一種工作流程解決方案,用戶可以選擇某些流程元素。如果我的假設不正確,請糾正我。按慣例用戶不應該接觸後端配置。爲了做到這一點,他們需要知道內部類/對象等。如果你想提供可定製的工作流程,還有其他可用的選項,如drools-jbpm或活動bpm,這些選項是複雜的,並且有與之相關的學習曲線。但是,如果你的用例很簡單,即使你可以創建一個簡單的工作流程,並給用戶選擇使用用戶界面選擇不同的工作流程。 –

回答

2

這是否是一個可用的解決方案在很大程度上取決於你的情況和你的用戶。用戶直接編輯applicationContext.xml會出現什麼問題?如果只是爲了在文件中進行組織,以便您知道哪些文件可以找到哪些設置,並且您自己的特殊XML語法更具可讀性,那麼您還可以簡單地使用<import>標籤來包含另一個spring xml配置文件,該文件可以是由用戶編輯。您也可以使用create your own XML namespace,以便您可以在此文件中使用自己的XML格式,從而使該文件更具可讀性。

但是,如果您分離這些文件的動機是可以獨立維護這些文件,並且不瞭解applicationContext.xml的用戶可以編輯該文件,或者即使用戶可以編輯該文件也是安全問題,那麼這個解決方案是一個問題。你當然可以通過指定一個明確的bean列表來解決這個問題,這個列表就像你的config.xml文件的編輯器可用的接口,並且對XML文件運行驗證以確保只使用你的命名空間(可能不包含標籤可能存在安全風險),並驗證只有bean名稱是在您的API中發佈的引用,但它會使維護變得更加困難並增加安全問題的風險。然而,在這種情況下提出更好的解決方案需要更深入地瞭解您的要求實際是什麼以及您想要實現的目標。

+0

我想你給了我一個很好的概述,但我不同意關於進口等的第一部分。 ApplicationXml應該在任何時候被用戶觸及。我會去「接口」解決方案並運行驗證。謝謝 – LoreV