Как Spring Boot обнаруживает и подключает модули автоконфигурации?

«Как Spring Boot обнаруживает и подключает модули автоконфигурации?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Spring Boot использует механизм автоконфигурации, который автоматически настраивает бины на основе classpath и свойств приложения. Процесс обнаружения:

1. Сканирование classpath При старте приложение проверяет наличие ключевых классов (например, DataSource.class, JpaRepository.class).

2. Загрузка конфигураций из META-INF/spring/ Основной источник — файл org.springframework.boot.autoconfigure.AutoConfiguration.imports (в Spring Boot 2.7+). В более старых версиях использовался spring.factories.

Пример содержимого AutoConfiguration.imports:

org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration

3. Условная загрузка с @Conditional аннотациями Каждый класс автоконфигурации активируется только при выполнении условий.

@Configuration
// Конфигурация загрузится, только если в classpath есть DataSource и H2 Database
@ConditionalOnClass({ DataSource.class, org.h2.Driver.class })
@ConditionalOnProperty(name = "spring.datasource.url")
public class DataSourceAutoConfiguration {
    @Bean
    @ConditionalOnMissingBean // Создаст бин, только если его ещё нет в контексте
    public DataSource dataSource() {
        // Автоматическая настройка DataSource
    }
}

Почему это работает? Стартеры (например, spring-boot-starter-data-jpa) содержат файл AutoConfiguration.imports, который указывает Spring Boot, какие классы конфигурации следует оценить и применить. Это избавляет разработчика от ручной настройки.