Как стать автором
Обновить

Комментарии 5

Обратите внимание - Spring Data заранее не знает о том, сколько бинов репозиториев она должна будет создать и впоследствии зарегистрировать в контексте. Соответственно, единственный способ решить данную проблему это динамически регистрировать бины.

Не понятно, к чему эта фраза. Spring точно так же заранее не знает сколько у вас в classpath классов помечено аннотацией @Component или @Service. Соответственно, он точно так же должен сканировать весь classpath, считывать аннотации, создавать бины и помещать их в хранилище. Поэтому "динамическая" регистрация бинов должна существовать задолго до Spring Data.

По мне так и то и то динамическое, только рассматриваемый способ более гибкий и кастомизируемый.

Просто два разных процесса регистрации бинов.

Один статический, управляемый конфигурацией и на него не повлиять после запуска приложения. Одна и та же конфигурация, породит одни и те же бины.

И динамический, когда бины создаются в ручную, динамически, в рантайме.

  1. Согласен с комментариями выше. И «обычные» бины spring регистрирует динамически. Т.е динамически (в рантайме в при инициализации контекста сканируется classpath и регистрируются BeanDefinition’ы из классов Component и Configuration

  2. Не понял секцию про AOT.
    Spring AOT работает, в том числе, путём Annotation Processing-а, и теперь представьте, что APT видит использование BeanDefinitionRegistryPostProcessor. Какой он из этого должен сделать вывод? Да никакой, и APT придётся анализировать Ваши исходники, чтобы понять, а что же Вы всё-таки там делаете.

    Но и с новым BeanRegistrar тоже же непонятно что внутри метода register. Может быть что угодно, и тоже придется парсить исходники. Ну или с обратной стороны, с тем же успехом можно скомпилить код метода BeanDefinitionRegistryPostProcessor. В общем не понятно чем новый апи в AOT помогает.

Про АОТ. Я так думаю, дело не в том, что бы решить будет создан Бин или нет, а в том, какой бин будет создан. Ты там можешь создать инстанцию любого класса и зарегистрировать как бин.

А теперь есть конкретное описание бина, с его свойствами, который ты собираешься создать в рантайме.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий