spring - 有没有办法覆盖组件扫描发现的 bean?

标签 spring dependency-injection spring-3 spring-annotations

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

相关文章:

java - 无法通过 requestMapping 处理请求

android - 请使用覆盖选项或检查定义,koin android?

android - Dagger 2 第三方注入(inject) Android

java - Spring +Ehcache : Not able to get the cache back from cacheManager without key

Spring security - 为什么 RoleVoter 支持所有类而 WebExpressionVoter 只支持 FilterInvocation 的子类?

java - 如何获取 Spring 3 的 spring-framework-3.0.5-RELEASE-with-dependencies.zip 文件?

java - 在 Spring 上下文加载之前避免 Log4j 警告

java - 运行测试用例时 Spring 依赖注入(inject) null

java - 在系统 A->B->C 之间发送文件而不将整个文件存储在 B 中

java - Wicket 口依赖注入(inject)