2011-07-19 107 views
2

我希望能夠爲我的域類中的某些字段設置默認值。 到目前爲止,我有一個課程,它爲我的整個項目存儲了一個設置地圖,並且有一個任務可以將此地圖移動到redis數據庫中。 現在已經到了,我把所有的數據都移到了redis中,並創建了一個很好的spring bean來獲取/設置值。 但是... 似乎在注入bean之前在域類實例上設置了默認值。 這種打破了整個過程。 另外...單元測試存在問題。 我創建了一個實現與spring bean相同的接口並保存測試值的類。我想將它注入到域類中,但這也失敗了。如何在域類中處理外部存儲的默認值

所以現在我試圖找到一種很好的方法來處理外部存儲的具有運行單元測試能力的域類的失效值。 有什麼想法?

+0

所以我試着在beforeInsert事件中設置默認值,但事務結束後設置了默認值,因此在我的控制器中呈現後。這使它無法使用。 – Krystian

+1

您可以詳細說明您在外部存儲域類缺省值的動機嗎?你的主要用例是否能運行單元測試? –

+1

我這樣做是爲了能夠在應用程序運行時輕鬆更改數據而不犧牲性能[或者我相信]。 – Krystian

回答

0

我在最後做了什麼: 我創建了一個連接到Redis的類,並獲取我需要的所有數據。 對於單元測試,我創建了這個類的副本,它實現了相同的接口,但不是從Redis獲取數據,而是在裏面有一個簡單的Map,並從那裏獲取數據。最後它的行爲相同,但數據存儲在內部。所以在我的單元測試中,我會在適當的時候注入這個類的單元測試版本。

可能不是最好的解決方案,但它在過去幾個月對我有用。

0

有幾個不同的方法,你可以採取:

  • 介紹使用默認值一個單獨的bean,使那些被以同樣的方式提供的,因爲他們之前。在單獨的更高級別上下文中或之後的應用程序啓動中,您可以使用從數據庫中提取的那個覆蓋bean定義
  • 使用BeanPostProcessor或BeanFactoryPostProcessor指定默認值,然後使用新bean檢索新的bean值

如果這些答案都沒有幫助,請發佈您的設置和示例代碼,以便我可以更清楚地瞭解您正在嘗試執行的操作。