Бины, созданные ImportBeanDefinitionRegistrar во время автоконфигурации, не подходят для всех постпроцессоров бинов. - PullRequest
1 голос
/ 18 февраля 2020

Я реализовал ImportBeanDefinitionRegistrar для создания определений бина из внешнего источника. Это должен быть регистратор, так как я не знаю заранее, сколько определений bean-компонентов будет создано.

Когда я использую регистратор в своем классе Application, как это:

@SpringBootApplication
@Import(GenesysRegistrar.class)
public class IntegrationServer {
...
}

все работает нормально .

Я хотел сделать автоматы импорта c для каждого приложения, использующего JAR, который содержит регистратор, поэтому я создал следующий класс:

@Configuration
@Import(GenesysRegistrar.class)
public class GenesysAutoConfiguration {
    /**/
}

и зарегистрировал его в META- INF / spring.factories под ключом org.springframework.boot.autoconfigure.EnableAutoConfiguration.

Сейчас автоконфигурация работает, но я получаю следующие сообщения в журнале:

Bean 'xxx' of type [XXX] is not eligible for getting processed by all BeanPostProcessors

В чем разница между импортом реестра из приложения класс а из автоконфигурации класс? Я обнаружил, что ПОСЛЕ моих bean-компонентов создаются следующие постпроцессоры:

methodValidationPostProcessor
persistenceExceptionTranslationPostProcessor
webServerFactoryCustomizerBeanPostProcessor
errorPageRegistrarBeanPostProcessor

Я пытался добавить @AutoConfigureOrder(Integer.MAX_VALUE) в мой класс автоконфигурации, но это ничего не меняет.

Любые идеи, как я могу исправить порядок, чтобы бины из определений, созданных моим регистратором, обрабатывались после всех постпроцессоров? Почему Spring создает их раньше всех постпроцессоров? Любая, почему проблема не возникает при использовании @Import в классе приложения?

1 Ответ

0 голосов
/ 19 февраля 2020

Ранние инициализированные bean-компоненты - это зависимости, внедренные в другой bean-фактор посредством внедрения конструктора.

Если фабрика bean-компонентов использует инъекцию свойства вместо инъекции construcotr, то этого не происходит.

Вопрос в том, внедрена ли конструктор на фабрике bean это «плохая практика» - не нашли ничего, что бы это запрещало.

Создан тикет для весенней загрузки (как это происходит только во время автоконфигурации загрузки): Issue # 20219

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...