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

BeanPostProcessor и BeanFactoryPostProcessor

Вопрос

Чем BeanFactoryPostProcessor отличается от BeanPostProcessor?

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

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

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

Коротко

Правильный ответ: BFPP меняет определения до создания, BPP работает с экземплярами. BeanFactoryPostProcessor выполняется один раз, когда определения загружены, но бины ещё не созданы: может поменять BeanDefinition (например, подставить значения свойств).

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

  1. BFPP вызывается для каждого бина, а BPP один раз на весь контекст
  2. BPP работает только с singleton-бинами, а BFPP с prototype
  3. BFPP меняет определения до создания, BPP работает с экземплярамиправильный ответ
  4. Это синонимы из разных версий Spring, разницы в поведении нет

Разбор

BeanFactoryPostProcessor выполняется один раз, когда определения загружены, но бины ещё не созданы: может поменять BeanDefinition (например, подставить значения свойств). BeanPostProcessor вызывается для каждого создаваемого бина до и после инициализации, может вернуть другой объект: так появляются AOP-прокси. Со скоупами разделение не связано.

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

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