По порядку Middle Бины: скоупы и жизненный цикл обновлено

Этапы жизненного цикла бина

Вопрос

Расставьте этапы создания singleton-бина по порядку.

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

Расставьте шаги по порядку стрелками.

  1. 1
    BeanPostProcessor.postProcessBeforeInitialization и @PostConstruct
  2. 2
    afterPropertiesSet() и initMethod
  3. 3
    BeanPostProcessor.postProcessAfterInitialization: создание прокси
  4. 4
    Aware-колбэки (BeanNameAware, ApplicationContextAware)
  5. 5
    Вызов конструктора
  6. 6
    Внедрение зависимостей в поля и сеттеры
Показать ответ и разбор

Коротко

@PostConstruct обрабатывается BeanPostProcessor-ом на шаге before-initialization, поэтому стоит до afterPropertiesSet. Прокси появляется последним, поэтому в коде инициализации его ещё нет.

Правильный порядок

  1. 1
    Вызов конструктора
  2. 2
    Внедрение зависимостей в поля и сеттеры
  3. 3
    Aware-колбэки (BeanNameAware, ApplicationContextAware)
  4. 4
    BeanPostProcessor.postProcessBeforeInitialization и @PostConstruct
  5. 5
    afterPropertiesSet() и initMethod
  6. 6
    BeanPostProcessor.postProcessAfterInitialization: создание прокси

Разбор

@PostConstruct обрабатывается BeanPostProcessor-ом на шаге before-initialization, поэтому стоит до afterPropertiesSet. Прокси появляется последним, поэтому в коде инициализации его ещё нет.

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

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