码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【Spring源码】12. 注册bean处理器registerBeanPostProcessors()


    在invokeBeanFactoryPostProcessors(beanFactory)方法中,我们调用了各种beanFactory处理器,接下来我们来瞅瞅registerBeanPostProcessors(beanFactory),这个方法是refresh方法中的第6个方法,位置如下图:

    进入后

    再次进入名为registerBeanPostProcessors的方法

    第一步,去工厂里根据类型扫描,找到所有的实现了BeanPostProcessor接口的类并记录下BeanPostProcessor的数量

    第二步,定义集合并将符合要求的BeanPostProcessor放入相应的集合中

    • 存放实现了PriorityOrdered接口的BeanPostProcessor

    • 存放实现了MergedBeanDefinitionPostProcessor接口的BeanPostProcessor

      • MergedBeanDefinitionPostProcessor则是在合并处理Bean定义的时候的回调(Spring 内部使用)

      • 关于BeanFactoryPostProcessor(bfpp)和BeanPostProcessor(bpp)的区别

        • BeanPostProcessor处理的是bean的实例,BeanFactoryPostProcessor处理的是BeanDefinition

    • 存放实现了Ordered接口的BeanPostProcessor

    • 存放普通的BeanPostProcessor的name集合

    遍历判断并放入对应的集合

    1.如果ppName对应的BeanPostProcessor实例实现了PriorityOrdered接口,则捕获到ppName对应的BeanPostProcessor的实例添加到priorityOrderedPostProcessors中

    2. 处理实现了Ordered接口的BeanPostProcessor

    3. 处理未实现了PriorityOrdered接口和Ordered接口(其余的)的BeanPostProcessor

    ​4. 上面每一个大步骤基本都包含了三小步:

    1⃣️将符合要求的BeanPostProcessor放入相应的集合中

    不符合会再次判断该BeanPostProcessor是否实现了MergedBeanDefinitionPostProcessor(符合放入internalPostProcessors中)

    2⃣️给放入集合的BeanPostProcessor排序

    sortPostProcessors()

    3⃣️注册放入集合的BeanPostProcessor

    registerBeanPostProcessors()遍历注册传入的PostProcessor

    所以最后还需要处理集合internalPostProcessor的排序和注册

    5. 最后一步,注册ApplicationListenerDetector到BeanFactory中

    (o^^o)

  • 相关阅读:
    【全3D打印坦克——基于Arduino履带式机器人】
    SMART PLC PID仿真 (SMART PID仿真库使用说明)
    【kafka】解决kafka-tool连接上kafka,brokers和topics不显示问题
    如何使用 Authing 单点登录,集成 Discourse 论坛?
    【23种设计模式】抽象工厂模式(三)
    复现一个循环问题以及两个循环问题
    【Mysql】多表关系设计
    影像信息提取DEM
    module内包含第三方aar包,完整打包上传maven的方法
    Xavier(8):Xavier使用速腾聚创激光雷达运行a-loam算法部分报错与解决方案
  • 原文地址:https://blog.csdn.net/aqin1012/article/details/126136230
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号