java - 生命周期事件中的 BeanFactoryPostProcessor 和 BeanPostProcessor

标签 java spring

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

我知道 BeanFactoryPostProcessor 对 bean 定义进行操作,即在创建 bean 实例之前它被执行,而 BeanPostProcessor 在 bean 被实例化并调用生命周期事件之后被执行。

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

最佳答案

BeanFactoryPostProcessor 是一个接口(interface),实现它的 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 定义都将被加载但还没有 bean 被实例化时,将调用实现 BeanFactoryPostProcessor 的 bean。这允许覆盖或添加属性,甚至是急切初始化的 bean。这将让您可以访问您在 XML 中定义或已注释(通过组件扫描进行扫描)的所有 bean。
  2. 实现 BeanPostProcessor 的 bean 对 bean(或对象)实例进行操作,这意味着当 Spring IoC 容器实例化 bean 实例时,BeanPostProcessor 接口(interface)会完成它们的工作。
  3. BeanFactoryPostProcessor 实现在 Spring 上下文启动期间被“调用”,所有 bean 定义都将被加载,而 BeanPostProcessor 在 Spring IoC 容器实例化一个bean(即在所有单例的启动期间和原型(prototype)的按需启动期间)

关于java - 生命周期事件中的 BeanFactoryPostProcessor 和 BeanPostProcessor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30455536/

相关文章:

java - 选择合适的模板引擎

java - java插件中的html转pdf

hibernate - 为什么 Spring HibernateTemplate loadAll() 方法会为每一行生成更新?

java - 使用多个表单在 View 上提交表单时出现 Spring "Neither BindingResult nor plain target object for bean name"错误

java - 如何在 Spring MVC 中将数据库中的数据存储到字段中

java 窥孔优化初学者编译器

java - 在 SWT 树中查找特定项目

java - 使用 BFS 时,为什么我的 Words 没有在无向/未加权图中连接?

java - Spring Boot 1.5.2.RELEASE 数据库支持的 session

java - 一对多 Spring 结果映射