• Spring-分析BeanFactoryPostProcessor后置处理器


    一、概述

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

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

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

    二、代码分析

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

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

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

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

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

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

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

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

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

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

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

  • 相关阅读:
    【语义分割】2021-Segmenter ICCV
    核医学重点归纳
    【STM32教程】第四章 STM32的外部中断EXTI
    弱口令破解工具--超级弱口令工具/hydra
    ESP32 AT指令连接AWS亚马逊云
    闭包及闭包的使用
    服务器正文23:定时器设计与实现(8/7)
    【C++】C++ 引用详解 ⑦ ( 指针的引用 )
    国产大模型新标杆!比肩GPT4,DeepSeek V2重磅升级
    前端设计模式
  • 原文地址:https://blog.csdn.net/weixin_37607613/article/details/126228029