码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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实现BeanDefinitionRegistry、PriorityOrdered接口,在此处会运行ConfigurationClassPostProcessor的postProcessBeanDefinitionRegistry方法扫描容器的配置类得到beanDefinition集合。

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

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

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

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

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

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

  • 相关阅读:
    IT创业网赚项目 - 越垂直越赚钱,这个思维价值连城。
    PTA 7-81 统计工龄
    kong 和konga网关部署及使用
    硬件开发(一)DRV2667芯片的开发指南!
    RK3399应用开发 | 移植libdrm到rk3399开发板(2.4.113)
    机器学习实操的七个步骤
    C语言指针进阶内容讲解-成长路上必看
    【热门话题】前端框架发展史
    使用重建大师进行重建时,为什么引擎信息中显示只有一台主机能运行?
    后端数据配置相对路径,前端添加网站根 URL (根路径)- js获取网站项目根路径- 获取根路径后的第一个斜杠前 / 的项目- - 判断url包含某字符串
  • 原文地址:https://blog.csdn.net/weixin_37607613/article/details/126228029
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号