Spring源码解析5-注册BeanPostProcesser与消息资源和监听器的初始化与注册

2023-05-16

refresh()的registerBeanPostProcessors()

实例化并且注册所有的beanPostProcessor处理器,这里只是注册功能,真正调用的是getBean方法

registerBeanPostProcessors()

 

 

registerBeanPostProcessors()

 

找到所有实现了BeanPostProcessor接口的类,按实现了PriorityOrdered接口,实现了Ordered接口,spring内部与普通的BeanPostProcessor分类存放,然后进行排序、注册。

最后注册ApplicationListenerDetector到beanFactory中,此类用来检测bean是否实现了ApplicationListener接口,两个作用:

1、实例化完成之后,如果bean是单例并且属于ApplicationListener接口,则加入到多播器中

2、bean销毁之前,如果bean是一个applicationListener,则从多播器中提前删除

 

 

refresh()的initMessageSource() 为上下文初始化message源,即不同语言的消息体,国际化处理

 

refresh()中的initApplicationEventMulticaster()与registerListeners(),用的是观察者模式

ApplicationEvent 事件

ApplicationListener 监听器

 

 

 

initApplicationEventMulticaster() 初始化事件监听多路广播器,创建多播器对象

判断容器中是否有自定义事件监听多路广播器,没有就采用默认的SimpleApplicationEventMulticaster

 

new SimpleApplicationEventMulticaster(),多播器对象应该包含一个监听器集合,自身没有就找父类

 

AbstractApplicationEventMulticaster的addApplicationListener()方法,找到监听器集合applicationListeners

 

registerListeners() 在所有注册的bean中查找listener bean,注册到消息广播器中

 

 

1、getApplicationEventMulticaster()获取多播器对象,addApplicationListener() 遍历应用程序中存在的监听器集合,并将对应的监听器添加到监听器的多路广播器中

2、从容器中获取所有实现了ApplicationListener接口的bd的bdName, addApplicationListenerBean()放入ApplicationListenerBeans集合中

3、先发布早期的监听器集合,getApplicationEventMulticaster().multicastEvent() 将给定的事件广播到对应的监听器上,然后执行相关事件监听触发的逻辑

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring源码解析5-注册BeanPostProcesser与消息资源和监听器的初始化与注册 的相关文章

  • Vue中进行pdf的预览下载 vue-pdf

    1 使用npm 下载vue pdf npm install span class token operator span save vue span class token operator span pdf 2 封装pdf组件 span
  • C# 的基本代码规范

    个人遵守的通用 C 代码规范 xff0c 其中参考了微软的代码规范 实际上在是使用一些框架开发时 例如 ASP NET Core 也应该遵循一定的模式规范 xff0c 但是本文只讨论一些比较通用的代码规范 文章将从下面的几个方面来谈论规范
  • ubuntu 文件夹消失怎么办

    点击文件夹 xff0c 然后摁F9
  • ffmpeg花屏解决(修改源码,丢弃不完整帧和解码错误帧)

    linux下模拟丢帧的命令 因为帧之间的参考关系 实测如果是1 几乎没有完好的帧 tc只能对发出的包做处理 但它还可以做延时抖动处理 sudo tc qdisc add dev enp0s31f6 root netem loss span
  • 使用SDF对ROS-Gazebo中模型进行编辑修改

    什么是SDF文件 SDF是一种XML格式 xff0c 能够描述机器人 静态和动态物体 照明 地形甚至物理学的各方面的信息 SDF可以精确描述机器人的各类性质 xff0c 除了传统的运动学特性之外 xff0c 还可以为机器人定义传感器 表面属
  • Ubuntu16.04桌面图标消失

    项目场景 xff1a 提示 xff1a 这里简述项目相关背景 xff1a 例如 xff1a Ubuntu16 04用了挺久 问题描述 xff1a 提示 xff1a 这里描述项目中遇到的问题 xff1a Ubuntu16 04重启后 xff0
  • uni-app 半屏地图拖拽滚动底部半屏,仿高德搜索拖拽

    lt template gt lt view class 61 34 event help details 34 gt lt view class 61 34 back last page 34 style 61 34 39 top 39
  • 1、 Seata快速开始

    一 seata服务搭建 第一步 xff1a 下载seata安装包 我们通过https github com alibaba spring cloud alibaba wiki E7 89 88 E6 9C AC E8 AF B4 E6 98
  • CSDN-markdown编辑器(含源码.md文件)

    说明 CSDN新版Markdown编辑器 20190412 这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题 xff0c 有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适
  • PS如何调整图片的大小

    快捷键Ctrl 43 Alt 43 i 一般会把纵横比勾选上
  • JAVA输入一个四位数的整数,要求编程将这个四位数中的个位,十位,百位,千位分别输出

    4 输入一个四位数的整数 xff0c 要求编程将这个四位数中的个位 xff0c 十位 xff0c 百位 xff0c 千位分别输出 1234 1 2 3 4 System out println 34 请输入四位数整数 xff1b 34 Sc
  • JAVA托运行李计算费用

    7 托运行李计算费用 xff1a 实验要求 xff1a xff08 1 xff09 货车在计算托运行李费用时以kg为单位计算费用 xff08 12元 kg xff09 xff0c 忽略重量中的小数部分 xff0c 即忽略不足1kg的部分 x
  • JAVA复制数组的三种方法

    public class test01 ArraysCopy public static void main String args 1 用for循环复制数组 int arr 61 1 2 3 4 5 6 7 8 9 int arr1 61
  • 如何把已安装的nodejs高版本降级为低版本

    windows如何把已安装的nodejs高版本降级为低版本 第一步 xff1a 先清空本地安装的node js版本 1 按健win 43 R弹出窗口 xff0c 键盘输入cmd 然后敲回车 xff08 或者鼠标直接点击电脑桌面最左下角的wi
  • SQL版本:多表连接查询(两张表为例)

    SQL版本 xff1a 数据准备 xff1a 创建一个数据库company CREATE DATABASE IF NOT EXISTS company 创建部门表 CREATE TABLE dept id INT PRIMARY KEY A
  • 【Redis 常用五大数据类型】

    常用五大数据类型 官方获取redis常见数据类型操作命令 xff1a http www redis cn commands html 1 Redis键 key keys 查看当前库所有key 匹配 xff1a keys 1 exists k
  • 【Mysql 基础知识】

    一 引言 1 1 现有的数据存储方式有哪些 xff1f Java程序存储数据 xff08 变量 对象 数组 集合 xff09 xff0c 数据保存在内存中 xff0c 属于瞬时状态存储 文件 xff08 File xff09 存储数据 xf
  • vue3 + vite + ts + setup , 第九练 自定义指令directive的使用,简单封装一个拖动指令

    除了 Vue 内置的一系列指令 比如 v model 或 v show 之外 xff0c Vue 还允许你注册自定义的指令 xff0c 一个自定义指令被定义为一个包含类似于组件的生命周期钩子的对象 钩子接收指令绑定到的元素 1 Vue3指令
  • MyBatis框架知识点总结

    一 引言 1 1 什么是框架 xff1f 框架 xff1a 框架使用你的 xff0c 而不是你在使用框架的 框架让我们提供什么信息 xff0c 配置信息 xff0c 数据库连接用户名密码等 xff0c 你必须提供 xff0c 还得按照框架要
  • AndroidStudio Unresolved reference

    在学习Kotlin过程中 xff0c 出现了两次在activity main xml中已注册id xff0c 但是在MainActivity kt中无法找到该Button的情况 后面发现是没有在build gradle中导入 39 koti

随机推荐