java - 在同一个应用程序上下文中保存同一个 spring bean 的两个不同版本

标签 java spring

我有一个基于 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/

相关文章:

java - 事件与引用共享

java - 为什么我的字符串变量没有被插入堆栈?

java - 使用 ActiveDirectoryLdapAuthenticationProvider 和嵌入式 ldif 的 Spring 身份验证

java - 使用 spring 数据从 mongodb 中选择随机条目

java - 无法从标准输入读取和验证正确的日期

java - 如何等待文件中的数据可用而不是获取 EOFException

java - 覆盖类型参数

java - Apache Tomcat 上的两个 MySQL 数据源配置

java - Hibernate 在几个选择查询或插入查询后挂起

java - 如何获取映射 URL 的 JSON 结果