Я навчаюсь на сертифікації Spring Core, і я маю деякі сумніви щодо того, як Spring обробляє життєвий цикл бобів, і зокрема щодо постпроцесора квасолі .
Отже, у мене є така схема:
Для мене цілком зрозуміло, що це означає:
На етапі Визначення компонента завантаження виконуються наступні кроки :
У @Configuration класи обробляються і / або @Components перевіряються на наявність і / або файли XML обробляються.
Визначення Bean, додані до BeanFactory (кожне індексується під своїм ідентифікатором)
Спеціальні компоненти BeanFactoryPostProcessor, які викликаються, можуть змінювати визначення будь-якого компонента (наприклад, для заміни значень властивості-заповнювача).
Потім на етапі створення квасолі виконуються наступні кроки :
Кожен компонент за замовчуванням нетерпляче створюється за допомогою екземпляра (створюється в правильному порядку з введеними залежностями).
Після введення залежності кожен компонент проходить фазу післяобробки, в якій може відбуватися подальша конфігурація та ініціалізація.
Після постобработки компонент повністю ініціалізований і готовий до використання (відстежується за його ідентифікатором до знищення контексту)
Добре, це для мене досить зрозуміло, і я також знаю, що існує два типи процесорів пост-обробки, які:
Ініціалізатори: Ініціалізуйте компонент за вказівкою (тобто @PostConstruct).
та всі інші: що дозволяють додаткову конфігурацію і які можуть працювати до або після кроку ініціалізації
І я публікую цей слайд:
Отже, для мене дуже зрозуміло, що ініціалізатори виконують післяпроцесорні процеси (це методи, котрі анотуються анотацією @PostContruct, і які автоматично викликаються відразу після методів сеттера (тобто після введення залежностей), і я знаю, що я можу використовувати для виконати певний пакет ініціалізації (так само заповнити кеш, як у попередньому прикладі).
Але що саме представляє інший постпроцесор bean? Що ми маємо на увазі, коли говоримо, що ці кроки виконуються до або після фази ініціалізації ?
Отже, мої компоненти створюються за допомогою екземпляра, а його залежності вводяться, тож фаза ініціалізації завершується (виконанням коментованого методу @PostContruct ). Що ми маємо на увазі, кажучи, що процесор поштової передачі Bean використовується до фази ініціалізації? Це означає, що це відбувається до виконання анотованого методу @PostContruct ? Чи означає це, що це могло статися до введення залежності (до цього викликаються методи встановлення)?
І що саме ми маємо на увазі, коли говоримо, що це виконується після кроку ініціалізації . Це означає, що це трапляється після того, що виконання анотованого методу @PostContruct чи що?
Я можу легко зрозуміти, чому мені потрібен анотований метод @PostContruct, але я не можу зрозуміти типовий приклад іншого типу пост-процесора квасолі, чи можете ви показати типовий приклад того, коли використовуються?