Выбор ответа Middle Бины: скоупы и жизненный цикл спрашивают часто обновлено

Prototype внутри singleton

Вопрос

ReportBuilder объявлен @Scope("prototype") и внедрён в конструктор singleton-сервиса. Сервис вызывают 100 раз. Сколько экземпляров ReportBuilder использует сервис?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Один: зависимость внедрена при создании синглтона. Prototype означает «новый экземпляр при каждом запросе бина у контейнера».

Варианты ответа

  1. 100: prototype создаётся на каждый вызов метода
  2. Ноль: prototype нельзя внедрить в singleton
  3. Один: зависимость внедрена при создании синглтонаправильный ответ
  4. Зависит от числа потоков, обрабатывающих вызовы

Разбор

Prototype означает «новый экземпляр при каждом запросе бина у контейнера». Синглтон запрашивает зависимость один раз, при создании, и дальше держит ту же ссылку. Чтобы получать новый экземпляр, нужен ObjectProvider.getObject(), метод @Lookup или scoped proxy. Внедрять prototype в singleton можно, просто эффект не тот, что ожидают.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.