Mam klasy konfiguracyjnej java zapewniając fooBean bezpośrednio i barBean przez skanowanie składnika.Czy istnieje sposób na zastąpienie komponentu bean wykrytego przez skanowanie składnika?
@Configuration
@ComponentScan(basePackages = { "com.blah" })
public class Config {
@Bean
public FooBean fooBean {
return new FooBean();
}
}
i chcę, aby używać go w przypadkach testowych i muszę wymienić fasolę z mocks:
@Configuration
@Import(Config.class)
public class TestConfig {
@Bean
public FooBean fooBean {
return new FooBeanMock();
}
@Bean
public BarBean barBean {
return new BarBeanMock();
}
}
(tutaj nie ma sensu do ponownego użycia Config, ale w prawdziwym życiu mam 1000 fasoli i muszę drwić tylko kilka)
Tutaj fooBean zostaje nadpisany, 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.
Jest również oficjalnym problem dla niego: https://jira.springsource.org/browse/SPR-9682
czy ktoś zna żadnego obejścia, aby zastąpić fasoli odkryta przez skanowania komponentu?
biorąc pod uwagę, że komponent bean jest starszym kodem i nie można go zmodyfikować, a dla jego zależności nie ma opcji ustawiających (atrybuty prywatne + @Resource).
Nie można ich pominąć w głównej konfiguracji. ponieważ potrzebuję komponentu bean i nie widzę możliwości utworzenia tego komponentu w inny sposób z powodu "Biorąc pod uwagę, że komponent bean jest starszym kodem i nie może być modyfikowany i nie ma żadnych programów ustawiających dla jego zależności (atrybuty prywatne + @Resource). ". W konfiguracji testowej, która importuje główną konfigurację, nie ma to żadnego sensu, ponieważ skanowanie komputera z zaimportowanej głównej konfiguracji zostanie wykonane. – mmoossen
Możliwe, że możesz podzielić główną konfigurację na dwie części: 1) skanowanie komponentów 2) wszystko inne. A następnie zaimportuj tylko ten drugi w konfiguracji testowej. Będziesz więc nadpisywać ustawienia skanowania komponentów dla testów. –
, które mogłyby to zrobić. dzięki za pomysł. spróbuję. – mmoossen