Как работает автоконфигурация в Spring Boot
Что проверяют
Понимаете ли вы, что это условная настройка по содержимому classpath, а не генерация кода, и умеете ли ей управлять.
Как отвечать
При старте Boot читает список автоконфигураций из зависимостей (файл META-INF/spring/...AutoConfiguration.imports, раньше это был spring.factories) и применяет каждую, если выполнены её условия.
Условия задаются аннотациями:
@ConditionalOnClass: класс есть в classpath. Есть драйвер и пул, значит настроимDataSource;@ConditionalOnMissingBean: пользователь не объявил свой бин этого типа. Именно это правило делает автоконфигурацию безобидной, ваш бин всегда побеждает;@ConditionalOnProperty: включено в конфигурации;@ConditionalOnWebApplicationи другие частные случаи.
Порядок применения задаётся через @AutoConfigureBefore и @AutoConfigureAfter.
Как этим управлять: объявить свой бин, задать свойство в application.yml, исключить целиком через @SpringBootApplication(exclude = ...).
Отдельно стоит знать про отладку: запуск с --debug печатает отчёт о том, какие автоконфигурации применились, а какие нет и по какому именно условию. Это первый инструмент, когда бин оказался не тот, которого ждали.
Где спотыкаются
Считают, что Boot генерирует код. Он только создаёт бины по условиям.
Не знают про @ConditionalOnMissingBean и боятся, что автоконфигурация перебьёт их настройку.
Отключают автоконфигурацию целиком вместо объявления своего бина.
Не пользуются отчётом по --debug и разбираются вслепую.