2012-07-05 132 views
4

我目前正在開發一個Web應用程序。我知道Spring的一些基礎知識,但是我沒有用過那麼多,因此我決定改進我的Spring技巧,並且遇到了一個我無法找到一個好的解決方案的問題。以編程方式修改Spring bean

我想在我的應用程序中實現一個功能,該功能將允許用戶在不觸及任何配置文件(例如spring beans)的情況下配置所有內容,基本上,想要部署,啓動和使用該應用程序的人應該只複製將.WAR文件導入到例如tomcat中,並且所有的配置應該在應用程序內完成(例如在OpenFire中)。

因此,我想用戶部署應用程序去某些URL和一切都通過用戶界面完成,他被問到一些參數(例如數據庫連接的細節)一旦所有的細節都給予一切都存儲在cfg文件,應用程序重新啓動並且配置過程結束。

我想在spring beans中擁有所有的配置細節,但是我發現我不能真正地通過編程來改變它們(一種解決方案是修改文件'out of spring'並重新加載app context之後病房 - 這是一個好方法嗎?)。 另一個例子是在WEB-INF中存儲xml文件,並且一旦從用戶那裏收集數據,然後如何將數據從非bean文件加載到應用程序上下文中?

任何建議appriciated!

回答

2

您可以將這些值保存在屬性文件中。您可以使用spring bean中的屬性文件值。
您也可以通過UI接受用戶輸入更新屬性文件中的值。

+0

這看起來很有希望,我會給它一個鏡頭並且馬上回報,謝謝Ajinkya! – Stugal

+0

是的,它很棒!我可以鏈接屬性文件和bean並修改屬性文件,awsome。現在我只需要檢查如何重新加載上下文,但這應該是直接的(hopefuly :))。非常感謝! – Stugal

+0

@Stugal:很高興我能幫忙:) – xyz

0

您可以通過ApplicationContext類和它的子類訪問ever bean。從這裏,你可以調用getter和setter來爲所有bean上的prograrties;但是需要注意的是應用程序上下文已經被創建,BeanFactory也會被創建,所以會有一些您錯過的生命週期步驟。

在你自己的bean上設置與生命週期無關的屬性肯定是可行的,但我不建議在上下文之後嘗試更改'基礎結構'bean的屬性(例如事務管理,包掃描)設置並開始。

如果你的目標用戶是一個天真的用戶,也許你可以提供修改屬性文件的功能,然後以編程方式重新加載web應用程序,和你的Spring上下文使用PropertyPlaceholderConfigurerPropertyOverrideConfigurer加載其屬性。

如果您的目標用戶是「內部」IT精明用戶,那麼您還可以使用JMX,這將允許您使用jconsole或類似方法更改上下文中每個bean的屬性。