Получить доступ

Что делает аннотация @Autowired?

JuniorСтереотипы и автосвязываниеSpring
Ещё спрашивают так:
  • Как Spring выбирает бин для @Autowired?
Коротко

@Autowired — точка внедрения: контейнер находит бин по типу и подставляет. Несколько кандидатов — уточняют @Primary, @Qualifier или имя.

  • На конструкторе, сеттере или поле; с одним конструктором аннотация не нужна
  • Нет подходящего бина — ошибка старта (или Optional / required=false)
  • Рекомендуется внедрение через конструктор

А ещё Внедрять можно и коллекции: List всех реализаций

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Важно не путать две вещи: регистрацию бина и его внедрение. Классом-бином объект делают стереотипы вроде @Component и @Service или метод с @Bean, а @Autowired лишь помечает место, куда контейнер должен что-то подставить. Поиск идёт по типу, и если подходящих бинов несколько, нужен @Qualifier или @Primary. Начиная со Spring 4.3 при единственном конструкторе аннотацию можно не писать вовсе — внедрение через конструктор происходит автоматически и считается предпочтительным.

Что хотят услышать

  • Поиск по типу и разрешение неоднозначности.
  • Где ставится и что если бина нет.

Частые ошибки

  • Думать, что аннотация сама регистрирует класс как бин.
  • Использовать внедрение в поле вместо конструктора.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Просит контейнер подставить подходящий бин в поле, конструктор или сеттер
  • ✗Регистрирует класс как бин в контейнере
  • ✗Создаёт новый экземпляр класса при каждом обращении
  • ✗Открывает транзакцию на время выполнения метода

Что спросят дальше

  • Что произойдёт, если подходящих бинов окажется несколько?
  • Почему внедрение через конструктор предпочтительнее?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем