Java Configuration

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

Конфигурация контейнера обычным Java-кодом

Не каждый bean удобно находить через Component Scanning. Иногда класс находится в сторонней библиотеке, требует параметров при создании или нужен полный контроль над тем, какой объект попадёт в контейнер. Для таких случаев Spring поддерживает Java Configuration.

@Configuration
class AppConfig {

    @Bean
    Clock clock() {
        return Clock.systemUTC();
    }

    @Bean
    TokenService tokenService(Clock clock) {
        return new TokenService(clock);
    }
}

Класс с @Configuration содержит методы конфигурации. Метод с @Bean описывает объект, который Spring должен зарегистрировать в контексте. Возвращаемое значение становится bean, а имя метода по умолчанию используется как его имя.

Параметр Clock clock во втором методе — это зависимость. Spring найдёт подходящий bean и передаст его при создании TokenService. Так конфигурация остаётся декларативной: мы описываем связи, а порядок сборки определяет контейнер.

Когда выбирать Java Configuration

  • нужно добавить в контейнер объект класса, который нельзя аннотировать;
  • создание объекта требует явной настройки или фабричного метода;
  • хочется видеть состав инфраструктурных beans в одном месте.
Component Scanning и @Bean не конкурируют. В одном приложении обычно используются оба подхода: свои сервисы удобно находить автоматически, а инфраструктурные объекты — описывать явно.