Я пытаюсь динамически зарегистрировать Бины в Spring Boot, однако порядок создания бинов всегда приводит к NoSuchBeanDefinitionException
, если он пытается автоматически подключить один из динамических бинов.
Моя установка состоит из двух проектов, одного проекта spring-boot-starter и реального приложения spring-boot.
Фактическое приложение регистрирует BeanDefinitionRegistryPostProcessor
, который добавляет определения бина. Сами экземпляры создаются с помощью другого компонента, определенного в начальном проекте, который сам принимает другой компонент в качестве зависимости.
Чтобы использовать динамически зарегистрированный компонент, я создал класс с аннотацией @Component
и определил конструктор, ожидающий указанный компонент в качестве параметра.
Когда я отлаживаю приложение, установив @Autowired(required=false)
, я вижу, что конструктор моего компонента вызывается до создания динамического компонента. Более того, даже фабричный бин не был создан в то время.
Добавлено @DependsOn
с именем фабричного компонента в компонент, в результате чего сначала создается фабрика, но не динамические компоненты.
Установка @DependsOn
с именем динамического компонента работает, но, похоже, это не правильный способ решения этой проблемы.
Почему Spring создает мои бины в неправильном порядке и что я могу сделать, чтобы решить эту проблему?
EDIT:
Мне удалось воспроизвести проблему в образце репозитория:
https://github.com/maveeee/spring-dynamic-bean-demo/