Autowired

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

@Autowired — это аннотация Spring Framework, которая запускает автоматическое внедрение зависимостей, указывая Spring IoC-контейнеру найти и внедрить подходящий бин в аннотированный конструктор, поле или сеттер. При применении @Autowired к конструктору Spring Boot выполняет инъекцию через конструктор — предпочтительный стиль, поскольку он делает зависимости явными и поддерживает иммутабельность с полями final. Инъекция через поле посредством @Autowired напрямую на приватном поле лаконична, но сложнее поддаётся модульному тестированию, так как опирается на рефлексию; инъекция через конструктор рекомендуется командой Spring для обязательных зависимостей. Если существует несколько бинов одного типа, @Autowired можно комбинировать с @Qualifier("beanName") или @Primary для устранения неоднозначности. Понимание @Autowired является ключевым для работы с любым классом @Service, @Repository, @RestController или @Configuration в Spring Boot-приложении, поскольку практически всё взаимодействие между бинами проходит через механизм внедрения зависимостей.

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

Autowired (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.

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

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

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

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