Выбор ответа Middle Бины: скоупы и жизненный цикл спрашивают часто обновлено
Prototype внутри singleton
Вопрос
ReportBuilder объявлен @Scope("prototype") и внедрён в конструктор singleton-сервиса. Сервис вызывают 100 раз. Сколько экземпляров ReportBuilder использует сервис?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Один: зависимость внедрена при создании синглтона. Prototype означает «новый экземпляр при каждом запросе бина у контейнера».
Варианты ответа
- 100: prototype создаётся на каждый вызов метода
- Ноль: prototype нельзя внедрить в singleton
- Один: зависимость внедрена при создании синглтонаправильный ответ
- Зависит от числа потоков, обрабатывающих вызовы
Разбор
Prototype означает «новый экземпляр при каждом запросе бина у контейнера». Синглтон запрашивает зависимость один раз, при создании, и дальше держит ту же ссылку. Чтобы получать новый экземпляр, нужен ObjectProvider.getObject(), метод @Lookup или scoped proxy. Внедрять prototype в singleton можно, просто эффект не тот, что ожидают.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.