Получить доступ

Как работает автоконфигурация Spring Boot?

MiddleSpring Boot и ActuatorSpring BootSpring Boot >=2.7
Ещё спрашивают так:
  • Как Spring Boot понимает, какие бины создать?
  • Как переопределить автоконфигурацию?
Коротко

Spring Boot подключает классы автоконфигурации из списка META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports (до 2.7 — spring.factories). Каждая создаёт бины по условиям: есть ли класс на classpath, есть ли уже такой бин, задано ли свойство.

  • @ConditionalOnClass, @ConditionalOnMissingBean, @ConditionalOnProperty
  • Свой бин того же типа — и автоконфигурация отступает
  • Отчёт: --debug или /actuator/conditions

А ещё Исключить: @SpringBootApplication(exclude = ...) или spring.autoconfigure.exclude

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Механизм. @SpringBootApplication включает @EnableAutoConfiguration. Он загружает список классов автоконфигурации из всех jar на classpath: в Spring Boot 2.7+ — файл AutoConfiguration.imports, раньше — spring.factories. Каждый класс — обычная @Configuration (точнее @AutoConfiguration), но с условиями.

Условия:

  • @ConditionalOnClass(DataSource.class) — библиотека есть на classpath;
  • @ConditionalOnMissingBean — пользователь не определил свой бин;
  • @ConditionalOnProperty("spring.cache.type") — задано свойство;
  • @ConditionalOnWebApplication, @ConditionalOnBean и другие.

Пример: добавили spring-boot-starter-data-jpa — на classpath Hibernate и HikariCP; автоконфигурация создаёт DataSource из spring.datasource.*, EntityManagerFactory, менеджер транзакций. Объявили свой DataSource — @ConditionalOnMissingBean выключит стандартный.

Отладка: java -jar app.jar --debug печатает отчёт условий (какие конфигурации применены и почему нет), то же в /actuator/conditions.

Свой стартер — модуль с классом @AutoConfiguration и записью в AutoConfiguration.imports.

Что хотят услышать

  • Откуда берутся классы автоконфигурации.
  • Условные аннотации и примеры.
  • Как переопределить и исключить.
  • Как посмотреть отчёт условий.

Частые ошибки

  • Считать автоконфигурацию «магией» без понимания условий.
  • Не знать, как отключить ненужную автоконфигурацию.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗Boot случайно подбирает бины при старте
  • ✗Все возможные бины создаются всегда
  • ✗Конфигурация читается только из XML
  • ✓Список авто-конфигов из AutoConfiguration.imports применяется по условиям @ConditionalOnClass/OnMissingBean/OnProperty

Что спросят дальше

  • Как отключить конкретную автоконфигурацию?
  • Где Boot ищет список автоконфигураций?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем