Весеннее контекстное конфигурирование с использованием bean-компонента несколько раз
Дан класс, который выполняет тестирование некоторых компонентов. Я хочу смоделировать fooService.send только один раз в тесте и использовать его в aService и bService:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AComponentTestConfiguration.class)
public class AComponentTest {
@Autowired
private AService aService;
@Autowired
private BService bService;
@Autowired
private FooService fooService;
// ... when(fooService.send(any())).thenReturn(response);
}
И конфигурация:
@Configuration
public class AComponentTestConfiguration {
private CService cService = new CService(); // 1
@Bean public FooService fooService() { return mock(FooService.class); } // 2
@Bean public BarService barService() { return new BarService(); } // 3
@Bean public AService aService() { return new AService(fooService(), barService(), cService); } // 4
@Bean public BService bService() { return new AService(fooService(), barService(), cService); }
}
Как я могу использовать экземпляры службы или макеты, которые должны быть предоставлены нескольким компонентам?
1: использовать закрытую переменную в экземплярах AService и BService
2, 3: Используйте функции - это приведет к 2 экземплярам для FooService и BarService, верно?
4: Какую опцию нужно использовать для макетов и реальных сервисных экземпляров?