Как именно работает Spring BeanPostProcessor?
Я учусь на сертификацию Spring Core, и у меня есть некоторые сомнения относительно того, как Spring справиться сжизненный цикл бобов и в частности опочтовый процессор.
Итак, у меня есть эта схема:
Для меня совершенно ясно, что это значит:
Следующие шаги выполняются вЗагрузить определения бина фаза:
@Configuration классы обрабатываются и / или@Компоненты сканируются и / илиXML-файлы разобраны.
Определения Bean добавлены в BeanFactory (каждое индексируется под своим идентификатором)
СпециальныйBeanFactoryPostProcessor вызванные компоненты могут изменить определение любого компонента (например, для замены значений свойства-заполнителя).
Затем вфаза создания бобов:
Каждый bean-компонент с готовностью создается по умолчанию (создается в правильном порядке с добавлением зависимостей).
После внедрения зависимости каждый компонент проходит фазу постобработки, в которой может произойти дальнейшая конфигурация и инициализация.
После постобработки бин полностью инициализируется и готов к использованию (отслеживается по его идентификатору, пока контекст не будет уничтожен)
Хорошо, это довольно ясно для меня, и я также знаю, чтоЕсть два типа постпроцессоров бобов которые:
Инициализаторы: Инициализируйте bean-компонент, если указано (т. Е. @PostConstruct).
а такжеВсе остальные: которые позволяют для дополнительной конфигурации и чтоможет выполняться до или после шага инициализации
И я публикую этот слайд:
Так что для меня совершенно ясно, чтоинициализаторы постпроцессоры бина (это методы, аннотированные@PostContruct аннотации и которые автоматически вызываются сразу после методов установки (так после внедрения зависимости), и я знаю, что я могу использовать для выполнения некоторого пакета инициализации (как заполнить кэш, как в предыдущем примере).
Но что именно представляет другой постпроцессор EJB? Что мы имеем в виду, когда говорим, что эти шаги выполненыдо или после фазы инициализации?
Таким образом, мои bean-компоненты создаются, а их зависимости внедряются, поэтому фаза инициализации завершается (выполнением@PostContruct аннотированный метод). Что мы имеем в виду, говоря, что постпроцессор бина используется перед фазой инициализации? Это означает, что это происходит до того, как@PostContruct аннотированное выполнение метода? Означает ли это, что это может произойти до внедрения зависимости (до того, как будут вызваны методы установки)?
И что именно мы имеем в виду, когда говорим, что это выполняетсяпосле шага инициализации, Это означает, что это происходит после того, как выполнение@PostContruct аннотированный метод или как?
Я легко могу понять, зачем мне нужна@PostContruct аннотированный метод, но я не могу представить какой-то типичный пример другого вида постпроцессора бобов. Можете ли вы показать мне типичный пример того, когда используются?