BeanPostProcessor

Базовый Spring
≈ 1 мин чтения

Точка расширения вокруг инициализации bean

Иногда нужно применить общую обработку ко многим beans: проверить их, собрать метаданные, изменить или даже заменить объект перед тем, как он начнёт использоваться приложением. Для этого в Spring есть интерфейс BeanPostProcessor.

@Component
class LoggingBeanPostProcessor implements BeanPostProcessor {

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) {
        System.out.println("Ready: " + beanName);
        return bean;
    }
}

Методы post-processor вызываются контейнером для создаваемых beans вокруг этапа инициализации. В примере мы ничего не меняем: просто выводим имя готового bean и возвращаем тот же объект.

Почему нужно возвращать объект

Контракт разрешает вернуть не только исходный bean, но и другой объект. На этом строится часть внутренней магии Spring: инфраструктура может оборачивать bean дополнительным поведением, не заставляя сам класс знать об этом механизме.

BeanPostProcessor — инфраструктурный инструмент. В обычной бизнес-логике писать собственные post-processors требуется редко. Гораздо важнее понимать, что Spring сам активно использует такие точки расширения.

На следующих страницах мы увидим два механизма, где идея «добавить поведение вокруг обычного bean» особенно заметна: AOP и прокси.