2013-03-10 58 views
0

我有一個基於spring的應用程序,它使用bean來描述某些實體的元數據。隨着我的應用程序的增長,元數據也隨之改變。在同一個應用上下文中持有同一個spring bean的兩個不同版本

一旦我的應用程序發佈了新的版本,我想維護舊的bean定義以及新的bean定義,並使它們可用於程序。

我最初的想法是將新屬性添加到名爲'Version'的bean定義中。它的值將對應於發行版本。因此,如果我想更改其中一個實體的元數據定義,我複製粘貼舊定義,進行必要的更改(例如添加字段)並更新版本字段。

在代碼中,我可以很容易地通過它們的版本篩選bean。

問題

自然,春天不會讓我有兩個bean使用相同的ID(它不知道,我其實可以通過版本歧義)。看起來,我不需要向bean定義中添加一個新屬性,而需要在名稱中編碼該版本。

這是在春天這樣做的正確方法(我沒有找到任何OOTB支持)?有沒有其他模式可以解決這個問題?

+0

我不明白你想做什麼,所以這可能是無關緊要的,但是你的bean的第一個「版本」的繼承和實例化父親和兒子不會解決這個問題? – benzonico 2013-03-10 13:25:25

+0

@benzonico,不,因爲我不一定要繼承一切。例如我可能想刪除字段或拆分字段(這相當於刪除和添加) – Vitaliy 2013-03-10 13:38:56

回答

1

您不能同時擁有兩個相同類型的豆類。您可以在bean名稱中包含版本後綴,但這可能會破壞您的某些@Autowired注入。

Spring配置文件(3.1中引入)是一種快速切換可選上下文配置的方法,但同時激活其中兩個可能會再次導致衝突。

相關問題