Выбор ответа Senior Бины: скоупы и жизненный цикл обновлено
BeanPostProcessor и BeanFactoryPostProcessor
Вопрос
Чем BeanFactoryPostProcessor отличается от BeanPostProcessor?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: BFPP меняет определения до создания, BPP работает с экземплярами. BeanFactoryPostProcessor выполняется один раз, когда определения загружены, но бины ещё не созданы: может поменять BeanDefinition (например, подставить значения свойств).
Варианты ответа
- BFPP вызывается для каждого бина, а BPP один раз на весь контекст
- BPP работает только с singleton-бинами, а BFPP с prototype
- BFPP меняет определения до создания, BPP работает с экземплярамиправильный ответ
- Это синонимы из разных версий Spring, разницы в поведении нет
Разбор
BeanFactoryPostProcessor выполняется один раз, когда определения загружены, но бины ещё не созданы: может поменять BeanDefinition (например, подставить значения свойств). BeanPostProcessor вызывается для каждого создаваемого бина до и после инициализации, может вернуть другой объект: так появляются AOP-прокси. Со скоупами разделение не связано.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.