@Configuration

Тема дорожной карты · Spring Boot

Конфигурация Spring Boot — это совокупность механизмов, с помощью которых Spring Boot-приложение связывается, настраивается и адаптируется к различным средам, сочетая авто-конфигурацию, вынесенные свойства и явные классы @Configuration. Аннотация @SpringBootApplication одновременно включает три поведения: @Configuration (помечает класс как источник конфигурации), @EnableAutoConfiguration (активирует умолчания Spring Boot) и @ComponentScan (обнаруживает все бины @Component, @Service, @Repository и @Controller). Разработчики переопределяют или расширяют авто-конфигурацию, определяя методы @Bean внутри классов @Configuration, которые имеют приоритет над умолчаниями Spring Boot через механизм @ConditionalOnMissingBean. Вынесенная конфигурация Spring Boot через application.properties, application.yml, переменные окружения и аргументы командной строки следует чётко определённому порядку приоритета источников свойств, задокументированному в справочнике Spring Boot. Понимание конфигурации Spring Boot обязательно перед работой со Spring Data JPA, Spring Security, Spring Cloud или любым другим Spring Boot-стартером, опирающимся на авто-настроенные бины.

Как это работает

@Configuration (Dependency Injection + Inversion of Control): Spring-контейнер инстанцирует + связывает ваши бины вместо new везде. @Component (и стереотипы @Service, @Repository, @Controller) маркируют класс как Spring-managed bean; @Bean-методы в @Configuration-классе производят явные бины. @Autowired инжектит зависимости. Bean scopes (singleton дефолт, prototype, request, session) контролируют lifetime. Lifecycle hooks (@PostConstruct, @PreDestroy) запускают init/cleanup.

Когда применять

Предпочитайте constructor injection (final поля + @RequiredArgsConstructor через Lombok) — immutable, тестируемо, fail fast на отсутствующих зависимостях. Field/setter injection только для legacy. Бины stateless; singleton + state = concurrent-баги. Не инжектьте ApplicationContext чтобы "найти" бины — это service locator + ломает IoC.

Типичные ошибки

Ловушки @Configuration: field injection (тяжело тестировать, скрывает constructor-зависимости); circular зависимости (Spring 3.x отклоняет по дефолту — фиксите дизайн); singleton-бины с mutable state (race conditions); @Autowired на non-final поле, переприсваиваемом позже (тихие баги).

Связанные понятия

Полезные ресурсы