我有一个基于 spring 的应用程序,它使用 bean 来描述某些实体的元数据。随着我的应用程序的增长,元数据也会发生变化。
在我的应用程序发布新版本时,我希望将旧的 Bean 定义与新的 Bean 定义一起保留,并使它们可供程序使用。
我最初的想法是向 bean 定义添加一个名为“Version”的新属性。它的值将对应于发布版本。因此,如果我想更改其中一个实体的元数据定义,我会复制粘贴旧定义,进行所需的更改(例如添加字段)并更新版本字段。
在代码中,我可以轻松地按版本过滤 Bean。
问题:
当然,Spring 不会允许我有两个具有相同 id 的 bean(它不知道我实际上可以通过版本来消除歧义)。看来我不需要在 bean 定义中添加新属性,而是需要在其名称中对版本进行编码。
这是在 Spring 中执行此操作的正确方法吗(我没有找到任何对此的 OOTB 支持)?还有其他模式可以解决这个问题吗?
最佳答案
您不能同时拥有两个类型相同且名称相同的 Bean。您可以在 Bean 名称中包含版本后缀,但这可能会破坏某些 @Autowired
注入(inject)。
Spring 配置文件(在 3.1 中引入)是一种在替代上下文配置之间快速切换的方法,但同时激活其中两个可能会再次导致冲突。
关于java - 在同一个应用程序上下文中保存同一个 spring bean 的两个不同版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15322690/