Auto-configuration

Базовый Spring
≈ 1 мин чтения

Настройка на основе того, что уже есть в проекте

Spring Boot старается автоматически создать типичную инфраструктуру, если видит, что она нужна приложению. Решение принимается по условиям: какие классы есть в classpath, какие свойства заданы и какие beans уже зарегистрированы пользователем.

Например, если в проекте присутствуют библиотеки для определённой технологии, Boot может подготовить связанные с ней beans. Если разработчик создаст собственный bean того же назначения, автоматическая конфигурация во многих случаях отступит и оставит управление пользовательской конфигурации.

Автоматическая конфигурация не означает скрытую магию

За auto-configuration стоят обычные конфигурационные классы Spring с условиями. Упрощённо их идею можно представить так:

@Configuration
@ConditionalOnClass(MailSender.class)
class MailAutoConfiguration {

    @Bean
    @ConditionalOnMissingBean
    MailService mailService() {
        return new MailService();
    }
}

Такая конфигурация срабатывает только при выполнении условий. @ConditionalOnClass проверяет наличие класса, а @ConditionalOnMissingBean позволяет не создавать bean, если подходящий объект уже определён приложением.

Не нужно запоминать все auto-configurations. Важно понимать принцип: Boot анализирует окружение и применяет конфигурацию условно. Когда поведение удивляет, полезнее выяснить, какое условие сработало или не сработало.