我有一个Java配置类,通过组件扫描直接提供FoeBebe和BaBeNe.

@Configuration
@ComponentScan(basePackages = { "com.blah" })
public class Config {

    @Bean
    public FooBean fooBean {
        return new FooBean();
    }
}

我想在测试用例中重用它,我需要用mock替换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,我只需要嘲笑几个)
在这里,福伯安被推翻,但不是巴伯安。
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是遗留代码,不能修改,并且它的依赖项(private attributes+@resource)没有setter。

最佳答案

尝试跳过不必要的bean:

@ComponentScan(basePackages = { "com.blah" }, excludeFilters = @Filter({UnnecessaryBean1.class, UnnecessaryBean2.class}))

07-24 20:19