【发布时间】:2015-10-17 11:32:25
【问题描述】:
我有一个包含通用 bean 的抽象 Spring 配置类:
public abstract class AbstractConfig {
@Bean
public CommonBean commonBean {
CommonBean commonBean = new CommonBean();
commonBean.specifics = getSpecifics();
};
public abstract String getSpecifics();
}
通用 bean 的细节由其子类设置:
package realPackage;
@Configuration
public class RealConfig extends AbstractConfig {
@Override
public String getSpecifics() {
return "real";
}
}
...和...
package testPackage;
@Configuration
@ComponentScan(basePackages = {"testPackage", "realPackage" })
public class TestConfig extends AbstractConfig {
@Override
public String getSpecifics() {
return "test";
}
}
我的测试只需要使用TestConfig 并且不应该知道RealConfig(但确实需要访问realPackage 中的其他组件)。开始:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = TestConfig.class)
public class MyIntegrationTestIT { //... }
使用上面的代码,这可以按预期工作并使用"test" 细节。但是,如果我颠倒 @ComponentScan 中的包顺序,则会使用 "real" 细节。这让我感到莫名其妙 - 我指定了TestConfig,所以它肯定应该调用覆盖的方法吗?谁能告诉 Spring 这样做的原因以及如何解决它?
【问题讨论】:
标签: java spring inheritance dependency-injection component-scan