Это интерфейс, который позволяет вмешиваться в процесс создания и инициализации бинов в Spring-контейнере.
Он предоставляет два основных метода, которые вызываются на разных этапах жизненного цикла бина:
1.
postProcessBeforeInitialization(Object bean, String beanName)Вызывается до инициализации бина (до вызова метода с
@PostConstruct или InitializingBean#afterPropertiesSet).2.
postProcessAfterInitialization(Object bean, String beanName)Вызывается после инициализации бина (после того, как все методы инициализации завершились).
Зачем нужен BeanPostProcessor?
Он используется для дополнительной обработки и кастомизации бинов после их создания, но до того, как они будут переданы клиентскому коду.
Примеры:
- Добавление проксирования бинов (например, для AOP или транзакций)
- Валидация или изменение свойств бина
- Логирование жизненного цикла
- Добавление кастомных аннотаций
- Обработка marker-интерфейсов
Как это работает?
1. Spring сканирует контекст на наличие бинов, которые реализуют интерфейс
BeanPostProcessor.2. Если такие бины найдены, они применяются ко всем бинам в приложении.
3. Методы
postProcessBeforeInitialization и postProcessAfterInitialization вызываются для каждого бина, который создаёт Spring.👉 Java Portal
