Spring 3 事件推送 bug 以及事件广播器初始化流程图
2022-10-20 15:48:31 5 举报
Spring 3 事件推送 bug 以及事件广播器初始化流程图
作者其他创作
大纲/内容
我们的 Bean 也实现了 ApplicationEventPublisherAware 接口,也会触发依赖注入,调用回调接口,此时 ApplicationEventMulticaster 还没初始化
根据类型+名称 从 Spring 容器中获取事件广播器对象
registerBeanPostProcessors(); 当接口实现了BeanPostProcessor 和 ApplicationEventPublisherAware 接口的时候
创建 SimpleApplicationEventMulticaster 并注册成为单例 Bean 到 Spring 容器中
是否存在早期事件earlyApplicationEvents
当前容器中是否有 applicationEventMulticaster 实例
不存在
存在
postProcessBeforeInitialization(); 初始化赋值 Bean的属性之前执行 BeanPostProcessor
获取事件并进行广播推送消息
该过程中会去依赖查找 BeanPostProcessor,并出发创建 Bean 的操作,
refresh(); Spring 容器启动方法
Spring 3 以后的版本才加了此段代码进行修复,之前的版本会爆空指针问题,因为此时 initApplicationEventMulticaster(); 并未初始化
获取监听器并添加到广播器中
invokeAwareInterfaces(bean); 执行 Aware 方法
initApplicationEventMulticaster(); 初始化事件广播器
registerListeners(); 注册监听器
检测此时 ApplicationEventMulticaster 是否初始化,如果没初始化存入 this.earlyApplicationEvents 中
0 条评论
回复 删除
下一页