Czy istnieje sposób na zastąpienie komponentu bean odkrytego przez skanowanie składników?
Mam klasę konfiguracji java, która zapewnia bezpośrednio fooBean i barBean poprzez skanowanie składników.
@Configuration
@ComponentScan(basePackages = { "com.blah" })
public class Config {
@Bean
public FooBean fooBean {
return new FooBean();
}
}
i chcę go ponownie wykorzystać w przypadkach testowych i muszę zastąpić ziarna fasolą:
@Configuration
@Import(Config.class)
public class TestConfig {
@Bean
public FooBean fooBean {
return new FooBeanMock();
}
@Bean
public BarBean barBean {
return new BarBeanMock();
}
}
(tutaj nie ma większego sensu ponowne używanie Config, ale w rzeczywistości mam 1000 Beans i muszę wyśmiać tylko kilka)
Tutaj fooBean zostaje przesłonięty, ale nie barBean.
Skipping loading bean definition for %s: a definition for bean " + "'%s' already exists. This is likely due to an override in XML.
Istnieje również oficjalny problem:https://jira.springsource.org/browse/SPR-9682
czy ktoś zna jakieś obejście w celu zastąpienia komponentu bean odkrytego przez skanowanie składników?
biorąc pod uwagę, że fasola jest kodem starszym i nie można go modyfikować, a dla jego zależności nie ma ustawników (atrybuty prywatne + @Resource).