可以在加载的 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 脚本中以编程方式构造替换变量的名称?