生命周期事件中的BeanFactoryPostProcessor和BeanPostProcessor

我试图理解BeanFactoryPostProcessorBeanPostProcessor之间的区别。

我知道BeanFactoryPostProcessor在bean定义上运行,即在bean实例创建之前,它会被执行,Bean实例化后会执行BeanPostProcessor并调用生命周期事件。

这是否意味着BeanFactoryPostProcessor不是Spring生命周期事件的一部分,因为它在实例化之前调用,而BeanPostProcessor是Spring生命周期事件的一部分? 请核实我的理解是否正确。

BeanFactoryPostProcessor是一个接口,实现它的bean实际上是经历Spring生命周期的bean(下面的例子),但这些bean不参与其他声明bean的生命周期。

 public class CustomBeanFactory implements BeanFactoryPostProcessor { @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { for (String beanName : beanFactory.getBeanDefinitionNames()) { BeanDefinition beanDefinition = beanFactory.getBeanDefinition(beanName); // Manipulate the beanDefiniton or whatever you need to do } } } 

关于BeanFactoryPostProcessorBeanPostProcessor的区别:

  1. 当所有bean定义都已加载时,将调用实现BeanFactoryPostProcessor bean,但尚未实例化任何bean。 这允许覆盖或添加属性,甚至是初始化bean。 这将允许您访问已在XML中定义的所有bean或已注释的bean(通过组件扫描进行扫描)。
  2. 实现BeanPostProcessor在bean(或对象)实例上运行,这意味着当Spring IoC容器实例化bean实例时,BeanPostProcessor接口会完成它们的工作。
  3. BeanFactoryPostProcessor实现在Spring上下文启动期间“调用”,所有bean定义将被加载,而BeanPostProcessor在Spring IoC容器实例化bean时被“调用”(即在启动期间为所有单例和按需提供一个类型) )

BeanFactoryPostProcessor在bean Object实例化之前执行(即在初始化Applicationcontext容器时)

BeanPostprocessor在创建bean对象后执行,因为它可以在init()之前和init()之后执行。