一、概述
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实现BeanDefinitionRegistryPostProcessor、PriorityOrdered接口,在此处会运行ConfigurationClassPostProcessor的postProcessBeanDefinitionRegistry方法扫描容器的配置类得到beanDefinition集合。
ConfigurationClassPostProcessor解析配置类流程可参考分析-ConfigurationClassPostProcessor原理_Just-Today的博客-优快云博客
3、接着在创建运行实现Ordered接口的BeanDefinitionRegistryPostProcessor实现类对象并运行方法。
4、创建没实现PriorityOrdered、Ordered接口的BeanDefinitionRegistryPostProcessor实现类对象并运行方法。
5、接着按照顺序先创建实现了PriorityOrdered接口的BeanFactoryPostProcessor实现类对象,通过invokeBeanFactoryPostProcessors方法遍历BeanFactoryPostProcessor集合运行postProcessBeanFactory方法

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

被折叠的 条评论
为什么被折叠?



