spring中的事件发布框架依赖于三个抽象,ApplicationEvent,ApplicationListener,ApplicationEventPublisher。ApplicationEventPublisher的实现类依赖于AbstractApplicationContext,当中又依赖于ApplicationEventMulticast,其发布事件依赖于是否有设置事件监听器执行器,如果有设置,执行事件监听器就异步的,否则就是同步的。

1、接口设计

2、启动

(1)在调用invokeBeanFactoryPostProcessors时,EventListenerMethodProcessor会获取容器中所有的EventListenerFactory类。

(2)在initApplicationEventMulticaster中初始化SimpleApplicationEventMulticaster。

(3)在registerListeners中,向eventMulticaster中添加静态指定的监听器,以及添加容器中类型为ApplicationListenere的实例,同时如果有需要早期发布的事件,则会发布事件。

(4)在finishBeanFactoryInitialization中,非懒初始化容器中的对象实例时,如果实例类型是SmartInitializingSingleton,比如EventListenerMethodProcessor,会提取有@EventListenere的方法,作为监听器添加到eventMulticaster中

(5)在finishRefresh中,会发布ContextRefreshEvent事件

3、发布事件

(1)发布事件时,会获取当前的 taskExecutor。

(2)获取对应事件及事件类型的Listeners

(3)如果设置了taskExecutor,则异步执行invokeListener,会触发事件监听器的执行。如果出现异常,则执行ErrorHandler。

(4)没有设置taskExecutor,则同步执行invokeListener,触发事件监听器的执行,异常时执行ErrorHandler.

spring中事件发布设计与实现相关推荐

  1. Spring的事件发布机制

    一:Spring的事件发布 ApplicationContext提供了针对Bean的事件传播功能,其中的主角是publishEvent()方法,通过这个方法可以将事件通知给系统内的监听器(需实现App ...

  2. 如何实现业务解耦?spring中事件监听了解一下

    一.前言 二.业务解耦之事件监听实战         1.事件监听三大组件          2.事件发布以及监听实战案例          3.事件发布以及监听原理 一.前言 耦合这个词在平常的开发 ...

  3. Spring Event事件发布机制

    使用Spring Event优雅实现业务需求. 文章目录 一. 什么是Spring Event 二. 为什么要用Spring Event 三. 使用Spring Event实现邮件发送 一. 什么是S ...

  4. spring中事务的设计和实现

    1.事务中的抽象设计 主要由TransactionMangager,TransactionDefinition,TransactionStatus和TransactionAttributeSource ...

  5. spring中expression框架设计与实现

    1.接口设计 主要由ExpressionParser,ParserContext,Expression,EvaluationContex以及EvaluationContex相关组件(OperatorO ...

  6. spring中type转换框架设计与实现

    1.概略图 2.接口设计 主要包含Converter及Formatter ConverterRegistry主要是添加.删除Converter以及ConverterFactory. Conversio ...

  7. spring中AnnotationUtils的设计

    其相关类层次图

  8. Spring事件发布机制

    目录 前言 一.事件驱动机制 二.Spring的事件发布机制 三.Spring事件使用实例 四.Spring事件驱动的实现原理 总结: 前言 在设计模式中有一种设计模式叫做观察者设计模式,观察者模式的 ...

  9. Spring Boot使用ApplicationEvent来实现事件发布订阅功能(美女一个都不能少,都要通知到) - 第420篇

    历史文章(累计400+篇文章) <国内最全的Spring Boot系列之一> <国内最全的Spring Boot系列之二> <国内最全的Spring Boot系列之三&g ...

最新文章

  1. java笔试题(3)
  2. 微信小程序从oracle取数,微信小程序 取随机数
  3. Hibernate中Session的清理与清空
  4. git 删除已经 add 的文件 记录
  5. replace和replaceAll
  6. 单词查找树(信息学奥赛一本通-T1337)
  7. 手写数字阅读器用户界面
  8. java ftp 大文件_用Java实现FTP批量大文件上传下载(二)
  9. sql server死锁_如何报告SQL Server死锁事件
  10. CCF NOI1034 钞票兑换
  11. [C#]WPF 3D 绘制一个正方体并调整视场角
  12. 江苏省2021年高考成绩查询有分数吗,江苏省2021年普通高考录取分数线公布
  13. Inception模块 GooLeNet网络
  14. 天行健,君子以自强不息
  15. LATEX 幻灯片入门
  16. 微信开通检测平台应如何选择?
  17. vue 样式标签使用 scoped
  18. 计算机课教学日志,教师教学日志例文
  19. python写的平行四边形_python 已知平行四边形三个点,求第四个点的案例
  20. fastjson 序列化 不包括转义字符_fastjson黑盒测试与白盒审计

热门文章

  1. Servlet开发配置
  2. UICollectionView 简单使用
  3. 水晶报表主子报表分页问题
  4. sqlServer事务
  5. python语言程序设计基础第二版答案-python语言程序设计基础(第二版)第五章答案随笔...
  6. 给python初学者的最好练手项目-Python的练手项目有哪些值得推荐?(知乎转载)...
  7. python人脸识别毕业设计-Python 40行代码实现人脸识别功能
  8. 有道python网课怎么样-如何用python“优雅的”调用有道翻译?
  9. python做小程序-【实战案例】利用Python做出趣味版防沉迷小程序
  10. python对文件的读操作方法有哪些-python--文件的读写操作