可以在加载的 Spring 上下文中以编程方式替换 Spring Bean

Posted

技术标签:

【中文标题】可以在加载的 Spring 上下文中以编程方式替换 Spring Bean【英文标题】:Can a Spring Bean programmatically replaced in an loaded SpringContext 【发布时间】:2011-10-28 09:24:00 【问题描述】:

我想编写一个集成测试,但有一个小限制。我有一个要模拟的 TimeSourceBean。这个 TimeSourceBean 在应用程序中被多次使用。 (没有办法通过反射来做到这一点)

一切都由自动接线完成。

我想我可以在我的测试中加载一个带有我喜欢的实现的附加 XML。 见:here!

但如果我可以在测试本身中创建我的模拟 TimeSourceBean 并将其注册(替换原始 bean)到上下文中,那就太好了

=> 所以在开始测试之前,我创建了模拟并像这样注册我的 bean:

context.registerBean(timeSourceBeanMockVersion);

如果可能的话,有什么想法吗?

【问题讨论】:

【参考方案1】:

您可以添加一个实现相同接口的其他 bean/类(希望您使用它们),并将这个其他 bean 类标记为 @Primary。

但是你需要确保这个主 bean 只在你需要的测试用例中加载。

【讨论】:

以上是关于可以在加载的 Spring 上下文中以编程方式替换 Spring Bean的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 Oracle SQL*plus 脚本中以编程方式构造替换变量的名称?

在目标 c 中以编程方式替换菜单视图

如何在 ios 9 中以编程方式导航到另一个具有“当前上下文”表示的视图控制器,目标 C

在Android中以编程方式刷新时被其他内容替换的小部件

是否可以在浏览器中以编程方式捕获页面上的所有事件?

如何在 Windows 中以编程方式强制重启/重新加载 Playback 设备?