当前位置: 首页 > 面试题库 >

生命周期事件中的BeanFactoryPostProcessor和BeanPostProcessor

邹华池
2023-03-14
问题内容

我试图理解之间的差异BeanFactoryPostProcessorBeanPostProcessor

我知道可以BeanFactoryPostProcessor对bean进行定义,即在创建bean实例之前先执行它,然后BeanPostProcessor在实例化bean和调用生命周期事件之后再执行它。

BeanFactoryPostProcessor是不是在实例化之前就称为BeanPostProcessorSpring生命周期事件的一部分,而不是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. BeanFactoryPostProcessor当所有bean定义都将被加载,但是尚未实例化任何bean时,将调用bean实现。这甚至可以覆盖或添加属性,甚至可以用于初始化bean。这将使您可以访问以XML定义或已注释(通过component-scan扫描)的所有bean。
  2. Bean实现BeanPostProcessor对Bean(或对象)实例进行操作,这意味着当Spring IoC容器实例化Bean实例时,BeanPostProcessor接口将完成其工作。
  3. BeanFactoryPostProcessor在所有上下文定义都将被加载之后,在Spring上下文启动期间“实现” BeanPostProcessor被“调用”,而在Spring IoC容器实例化bean时(即在所有单例的启动过程中以及根据原型的需求启动时)“调用”实现。


 类似资料:
  • 生命周期事件 There are two module lifecycle events OnModuleInit and OnModuleDestroy. You should use them for all the initialization stuff and avoid to work in the constructor. The constructor should only be

  • 要了解Spring事件是否适合我正在处理的任务,我需要了解它们是如何工作的,它们存储在哪里?因为我可以猜测它们存储在Spring应用程序上下文中,如果应用程序崩溃则会消失,我的猜测正确吗?

  • 问题内容: 下面是一个简单的计数器。但是我有3个问题。 第3行的状态是什么?它看起来像一个全局变量,如果有或在它之前会很有意义。那是生命周期函数/变量吗? 我必须从react导入Component吗?我记得我在v15中不需要这样做。 prevState来自哪里? 问题答案: 这是一个带有注释代码的演示,可为您提供更多信息:http : //codepen.io/PiotrBerebecki/pen

  • 我需要检查当前租户是否正在更新自己的实体,并使用了注释。如果我传递了完整的对象<code>存储库。save()方法我获得了必要的,但一旦我传递了(通过映射器映射到实体), 就为空。既然启用了 ,那么不应该映射字段吗? 注释工作正常,即使我只使用ID( ),我也会得到所述属性。我还尝试过使用 方法(因为 不可更新),但它仍然给出空值。我可以在这些事件中执行必要的检查吗,或者有其他解决方案吗(我希望保

  • 一般来说,一个组件类由 extends Component 创建,并且提供一个 render 方法以及其他可选的生命周期函数、组件相关的事件或方法来定义。 {% include './share/simple-component.md' %} getInitialState 初始化 this.state 的值,只在组件装载之前调用一次。 如果是使用 ES6 的语法,你也可以在构造函数中初始化状态,

  • 我正在努力解决与RouterLink一起使用的Ionic的生命周期事件。 我将我的应用程序数据保存在一个JSON文件中,该文件在加载页面时使用url参数呈现每个项目。我需要按钮来转到下一个或上一个项目并刷新页面内容,即: 我在第1项(/讲座/item1)= 是否有任何方法/解决方法来重新加载组件并更新传递不同参数的状态? 我已经尝试使用useHistory挂钩,历史。replace(Source)