2013-03-10 55 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中引入)是一种快速切换可选上下文配置的方法,但同时激活其中两个可能会再次导致冲突。

相关问题