Возможно, вам не хватает @DependsOn
где-то в вашем коде.Поскольку вы создаете bean-компоненты программно, нет никакой гарантии, что эти bean-компоненты будут доступны в контексте приложения.Для обеспечения порядка вы можете добавить @DependsOn
к конфигурации, которая его использует.См. Пример ниже
Конфигурация, которая зависит от другой конфигурации, которая создает бины программно
@Configuration
@DependsOn("TestConfiguration2")
public class TestConfiguration1 {
@Autowired
@Qualifier("/svc/curriculumScheduleService/1")
private DummyClass dummyClass1;
@Autowired
@Qualifier("/svc/curriculumScheduleService/2")
private DummyClass dummyClass2;
@Autowired
@Qualifier("/svc/curriculumScheduleService/3")
private DummyClass dummyClass3;
@Autowired
@Qualifier("/svc/curriculumScheduleService/5")
private DummyClass dummyClass5;
@PostConstruct
public void printBeans() {
System.out.println(dummyClass1.getVal());
System.out.println(dummyClass2.getVal());
System.out.println(dummyClass3.getVal());
System.out.println(dummyClass5.getVal());
}
}
Конфигурация, которая создает бины программно
@Configuration("TestConfiguration2")
public class TestConfiguration2 {
@Autowired
private ConfigurableBeanFactory beanFactory;
@PostConstruct
public void setup() {
String[] array = {"1", "2", "3", "5"};
Arrays.stream(array).map(Integer::parseInt).forEach(i -> {
System.out.println("creating new bean");
beanFactory.registerSingleton("/svc/curriculumScheduleService/" + i, new DummyClass(i));
});
}
}