我有一个java配置类直接提供fooBean,通过组件扫描提供barBean。
@Configuration
@ComponentScan(basePackages = { "com.blah" })
public class Config {
@Bean
public FooBean fooBean {
return new FooBean();
}
}
我想在测试用例中重用它,我需要用模拟替换bean:
@Configuration
@Import(Config.class)
public class TestConfig {
@Bean
public FooBean fooBean {
return new FooBeanMock();
}
@Bean
public BarBean barBean {
return new BarBeanMock();
}
}
(这里重用 Config 没有多大意义,但在现实生活中我有 1000 个 Bean,我只需要模拟几个)
这里 fooBean 被覆盖,但 barBean 没有。
Skipping loading bean definition for %s: a definition for bean " + "'%s' already exists. This is likely due to an override in XML.
还有一个官方问题: https://jira.springsource.org/browse/SPR-9682
是否有人知道任何解决方法来覆盖组件扫描发现的 bean?
考虑到 bean 是遗留代码,无法修改,并且没有 setter 用于其依赖项(私有(private)属性 + @Resource)。
最佳答案
尝试跳过不必要的 bean:
@ComponentScan(basePackages = { "com.blah" }, excludeFilters = @Filter({UnnecessaryBean1.class, UnnecessaryBean2.class}))
关于spring - 有没有办法覆盖组件扫描发现的 bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15972824/