Ответ
BeanFactoryPostProcessor и BeanPostProcessor — это интерфейсы Spring для модификации контекста приложения, но работают на разных этапах.
BeanFactoryPostProcessor:
- Работает с метаданными бинов до их создания.
- Может изменять конфигурацию (
BeanDefinition), например, свойства или scope. - Пример:
PropertySourcesPlaceholderConfigurerдля подстановки значений из properties-файлов.
@Component
public class CustomBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) {
BeanDefinition bd = beanFactory.getBeanDefinition("myBean");
bd.setScope(ConfigurableBeanFactory.SCOPE_PROTOTYPE);
}
}
BeanPostProcessor:
- Работает с экземплярами бинов после их создания (но до инициализации/после).
- Может модифицировать или обернуть бин (например, для проксирования).
- Пример:
AutowiredAnnotationBeanPostProcessorдля внедрения зависимостей.
@Component
public class CustomBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) {
if (bean instanceof MyService) {
// Логика до init-метода
}
return bean;
}
}
Ключевое отличие:
BeanFactoryPostProcessor — настройка метаданных бинов, BeanPostProcessor — работа с готовыми экземплярами.