一般的な 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 がこれを行う理由と、それをどのように解決できるかについて、だれかアドバイスしてもらえますか?