BeanPostProcessor
Точка расширения вокруг инициализации 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 дополнительным поведением, не заставляя сам класс знать об этом механизме.
На следующих страницах мы увидим два механизма, где идея «добавить поведение вокруг обычного bean» особенно заметна: AOP и прокси.