生命周期事件中的java BeanFactory后处理器和BeanPostProcessor
我试图理解BeanFactoryPostProcessor
和BeanPostProcessor
之间的区别
我理解BeanFactoryPostProcessor
对bean定义进行操作,即在创建bean实例之前执行它,在实例化bean并调用生命周期事件之后执行BeanPostProcessor
这是否意味着BeanFactoryPostProcessor
不是spring生命周期事件的一部分,而BeanPostProcessor
是spring生命周期事件的一部分?请核实我的理解是否正确
# 1 楼答案
豆厂后处理(BFPP):
当我们想要覆盖XML/注释时使用,因为Spring读取XML/注释来创建bean。如果您想在创建期间(在运行时)为Spring提供不同的配置,那么您需要使用BFPP。创建内部依赖关系图是一个一次性过程
Bean后处理器(BPP):
上述步骤只发生过一次。这就像创建bean的“菜单”。在创建bean之后,如果您想更改bean属性,就不能对XML/注释进行任何更改。相反,您可以在创建后使用BPP进行bean配置更改。BPP有两个执行区域,一个在@postconstruct之前,一个在@postconstruct之后
实时示例:
您想从Zomato在线订购食品。在线订购时,您会向餐厅提供食物列表(XML/注释)。但是,就在餐厅开始制作食物之前,你给他们打电话,让他们换菜(BFPP)。现在食物已经准备好交付,您已经收到了它(豆子被创建)。但是你想做一些修改(比如盐或冷粉),你可以在品尝食物之前做(因为你知道餐馆从来没有放足够的盐),甚至在品尝食物之后(这是在@postconstruct之前和之后)。一旦味道好了,食物就准备好了(豆子就可以使用了)
# 2 楼答案
BeanFactoryPostProcessor
在beanObject
实例化之前执行(即在Applicationcontext
容器初始化时)BeanPostprocessor
在创建bean对象之后执行,因为它可以在init()
之前和之后执行# 3 楼答案
BeanFactoryPostProcessor
是一个接口,实现它的bean实际上是经历Spring生命周期的bean(下面的示例),但这些bean不参与其他声明bean的生命周期关于
BeanFactoryPostProcessor
和BeanPostProcessor
的区别:BeanFactoryPostProcessor
的bean。这允许重写或添加属性,甚至可以初始化bean。这将使您能够访问在XML中定义的所有bean或带注释的bean(通过组件扫描进行扫描)李>BeanPostProcessor
的bean对bean(或对象)实例进行操作,这意味着当SpringIoC容器实例化bean实例时,BeanPostProcessor接口将完成它们的工作李>BeanFactoryPostProcessor
实现在所有bean定义加载后的Spring上下文启动期间被“调用”,而BeanPostProcessor
实现在Spring IoC容器实例化bean时被“调用”(即,在所有单例启动期间以及根据需要对proptotypes进行调用)# 4 楼答案
下面是一个流程图,它可能有助于理解Springbean的初始化生命周期
如我们所见,BeanFactoryPostProcessor的实现在任何SpringBean实例化之前执行,与BeanPostprocessor相反,BeanFactoryPostProcessor的实现方法仅在实例化bean时执行
源图像来自Spring5设计模式手册
我从书中选择了解释: