Spring-分析BeanFactoryPostProcessor后置处理器

本文深入剖析了Spring IoC容器在refresh方法中如何执行BeanFactoryPostProcessor和BeanDefinitionRegistryPostProcessor的后置处理。首先,容器调用invokeBeanFactoryPostProcessors方法,执行BeanDefinitionRegistryPostProcessor的postProcessBeanDefinitionRegistry方法,允许自定义注册beanDefinition。接着,按顺序创建并运行PriorityOrdered、Ordered接口实现类的后置处理方法。最后,按照优先级顺序运行BeanFactoryPostProcessor的postProcessBeanFactory方法。这一过程涉及配置类解析、beanDefinition注册等关键步骤。
部署运行你感兴趣的模型镜像

一、概述

BeanFactoryPostProcessor实现类是在ioc容器进行标准初始化后,可对容器的beanDefinition进行相关操作,此时bean还未实例化。

BeanFactoryPostProcessor:可对容器的beanDefinition信息进行修改

BeanDefinitionRegistryPostProcessor:可自定义向容器注册beanDefinition

二、代码分析

容器在refresh方法中调用invokeBeanFactoryPostProcessors方法创建BeanFactoryPostProcessor实现类并运行后置处理方法。

1、在invokeBeanFactoryPostProcessors方法中,先运行容器已有的beanFactory后置处理器集合中实现BeanDefinitionRegistryPostProcessor接口的实现类的postProcessBeanDefinitionRegistry方法。

BeanDefinitionRegistryPostProcessor接口继承了BeanFactoryPostProcessor接口,我们可通过实现BeanDefinitionRegistryPostProcessor接口的postProcessBeanDefinitionRegistry方法中注册自定义的beanDefinition到容器中。

2、接着扫描得到容器中实现BeanDefinitionRegistryPostProcessor接口的beanDefinition集合,按照顺序先创建实现PriorityOrdered接口的实现类对象,调用invokeBeanDefinitionRegistryPostProcessors方法运行对象的postProcessBeanDefinitionRegistry方法。

例如:ConfigurationClassPostProcessor实现BeanDefinitionRegistryPostProcessorPriorityOrdered接口,在此处会运行ConfigurationClassPostProcessorpostProcessBeanDefinitionRegistry方法扫描容器的配置类得到beanDefinition集合

ConfigurationClassPostProcessor解析配置类流程可参考分析-ConfigurationClassPostProcessor原理_Just-Today的博客-优快云博客

3、接着在创建运行实现Ordered接口的BeanDefinitionRegistryPostProcessor实现类对象并运行方法。

4、创建没实现PriorityOrderedOrdered接口的BeanDefinitionRegistryPostProcessor实现类对象并运行方法。

5、接着按照顺序先创建实现了PriorityOrdered接口的BeanFactoryPostProcessor实现类对象,通过invokeBeanFactoryPostProcessors方法遍历BeanFactoryPostProcessor集合运行postProcessBeanFactory方法

6、在创建实现了Ordered接口的BeanFactoryPostProcessor实现类并运行方法。

7、最后在运行没实现PriorityOrderedOrdered接口的BeanFactoryPostProcessor实现类并运行方法。

您可能感兴趣的与本文相关的镜像

Llama Factory

Llama Factory

模型微调
LLama-Factory

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值