Как и где Spring Boot хранит настройки для автоконфигурации (auto-configuration)?

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

Ответ

Автоконфигурации Spring Boot определены в библиотеке spring-boot-autoconfigure и активируются через @EnableAutoConfiguration.

Механизм и расположение:

  1. Файлы конфигурации: Список классов автоконфигурации находится в META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports внутри JAR-файлов.
  2. Классы конфигурации: Это обычные @Configuration классы, часто помеченные @AutoConfiguration и использующие аннотации @ConditionalOn... для условного создания бинов.

Пример (упрощенный):

@AutoConfiguration
@ConditionalOnClass(DataSource.class) // Создает бин, только если класс DataSource в classpath
@EnableConfigurationProperties(DataSourceProperties.class)
public class DataSourceAutoConfiguration {
    @Bean
    @ConditionalOnMissingBean
    public DataSource dataSource(DataSourceProperties properties) {
        return properties.initializeDataSourceBuilder().build();
    }
}

Переопределение: Автоконфигурацию можно заменить, определив собственный бин того же типа в вашей конфигурации или настроив свойства в application.properties/application.yml.