Этап 1 из 10 · ≈ 8 ч

IoC, DI и бины

Основа с Junior

Внедрение зависимостей, стереотипы и @Bean, жизненный цикл, scopes.

Что важно знать

  • IoC: объекты не создают зависимости сами — их внедряет контейнер.
  • Внедрение через конструктор — обязательные зависимости явно, неизменяемые поля, удобные тесты.
  • @Component, @Service, @Repository, @Configuration + @Bean.
  • Жизненный цикл: создание, внедрение, @PostConstruct, прокси, использование, @PreDestroy.
  • Scopes: singleton по умолчанию, prototype, request, session.

Критерии освоения

Junior ≈ 8 ч

  • Объясняет IoC и внедрение через конструктор и почему оно предпочтительнее
  • Объявляет бины стереотипами и методами @Bean
  • Описывает жизненный цикл бина и scopes singleton и prototype

Практика. Сделать приложение из трёх слоёв (контроллер, сервис, репозиторий) с внедрением через конструктор и тестом сервиса.

Middle ≈ 4 ч

  • Решает конфликты при нескольких кандидатах — @Primary, @Qualifier
  • Объясняет, почему prototype внутри singleton не обновляется и как это исправить

Практика. Разобрать на примере проблему prototype-бина внутри singleton и исправить через ObjectProvider.

Проверка знаний

Войдите, чтобы пройти тест: сданный тест отмечает тему пройденной на карте и в ИПР.

Вопросы с собеседований

Смотреть все
Как соотносятся IoC и DI в Spring?Junior

IoC (инверсия управления) — принцип: объекты не создают свои зависимости и не управляют своим жизненным циклом, это делает контейнер. DI (внедрение зависимостей) — конкретный способ IoC: зависимости передаются объекту извне — через конструктор, сеттер или…

Полный разбор
Чем @Component отличается от @Bean?Middle

@Component — на своём классе, бин находится сканированием. @Bean — на методе в @Configuration-классе, который создаёт и настраивает объект; подходит для чужих классов и сложной конструкции.

Полный разбор
Какие преимущества у constructor injection по сравнению с field injection? Выберите все верные.Junior

Внедрение через конструктор даёт final-поля, полностью готовый объект сразу после создания, явные зависимости и тесты без Spring — достаточно вызвать конструктор.

Полный разбор
Как разрешить неоднозначность, когда для внедрения подходят несколько бинов одного типа?Middle

При нескольких кандидатах — NoUniqueBeanDefinitionException. Решения: @Primary — бин по умолчанию; @Qualifier("имя") — выбрать конкретный в точке внедрения (он сильнее @Primary).

Полный разбор
Что такое Spring Bean?Junior

Бин — объект, которым управляет контейнер Spring: создаёт, внедряет зависимости, инициализирует, оборачивает прокси и уничтожает при закрытии контекста.

Полный разбор
Как внедрить сразу все реализации интерфейса и выбирать нужную в рантайме?Middle

Внедрить List<T> или Map<String, T>: Spring передаст все бины типа. Список — в порядке @Order, карта — с именами бинов в ключах. Нужная стратегия выбирается в рантайме.

Полный разбор
Какой scope у Spring-бина по умолчанию?Junior

По умолчанию singleton — один экземпляр на контейнер, общий для всех потоков. Ещё: prototype (новый на каждый запрос к контейнеру), веб-scope request, session, application, websocket.

Полный разбор
Что делает аннотация @Autowired?Junior

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

Полный разбор

Разборы темы

← Вся карта «Spring»

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования