spring源码解析系列之事件驱动模型架构
2019独角兽企业重金招聘Python工程师标准>>>
说在前面
本文转自“天河聊技术”微信公众号
为什么要去研究spring源码,我认为java最NX的就是我写接口你来实现,像oracle,要么就是想spring这样框架,什么框架我都可以整合你,这么NX的框架你没有想研究下源码的冲动吗。O(∩_∩)O哈哈~。
正文
事件监听器
今天介绍下,spring架构体系中的事件模型,面向事件编程可以使你的应用扩展性更好,设计更优美,更有设计感,也是解耦最常用的方式,首先看下类图。
ApplicationListener 事件监听器接口,基于观察者模式实现。
GenericApplicationListener 处理基于通用的事件监听器接口,提供了一种基于事件类型的监测,如下图
boolean supportsEventType(ResolvableType eventType);
是SmartApplicationListener的改良版本。
SmartApplicationListener 基于事件的监听器接口,如下图
boolean supportsEventType(Class<? extends ApplicationEvent> eventType);
ApplicationListenerMethodAdapter GenericApplicationListener适配器实现,如下图
public class ApplicationListenerMethodAdapter implements GenericApplicationListener {
可以看到是通过实现接口这种方式的适配器模式实现,在之前的文章有介绍,为什么实现接口这种方式比继承类这种实现扩展性更好,java是单继承,用实现接口这种方式可以间接的实现的多继承,扩展性更好。
SourceFilteringListener 基于GenericApplicationListener,SmartApplicationListener的装饰器模式实现,从指定的事件源筛选事件,调用它的委托侦听器来匹配应用程序事件对象。
GenericApplicationListenerAdapter GenericApplicationListener适配器模式实现。
事件
ApplicationEvent 事件抽象类
ApplicationContextEvent 用于应用程序上下文的事件的基类
ContextStoppedEvent 当应用程序上下文停止时引发的事件
ContextRefreshedEvent 在ApplicationContext被初始化或刷新时引发的事件
ContextStartedEvent 当应用程序上下文启动时引发的事件
ContextClosedEvent 当应用程序上下文关闭时引发的事件
发布与订阅相关
ApplicationEventMulticaster 接口由可以管理多个ApplicationListener对象的对象实现,并向它们发布事件
AbstractApplicationEventMulticaster 提供基本的侦听器注册功能
SimpleApplicationEventMulticaster 提供基本的侦听器注册功能,忽略它不感兴趣的事件
org.springframework.context.ApplicationEventPublisherAware 任何对象希望被其运行的ApplicationEventPublisher(通常是ApplicationContext)通知的任何对象实现的接口
EventPublicationInterceptor 事件发布拦截器
ApplicationEventPublisher 封装事件发布功能的接口
说到最后
本次先介绍了大概的框架,下一篇介绍具体的实现源码解析。
转载于:https://my.oschina.net/u/3775437/blog/1801833
spring源码解析系列之事件驱动模型架构相关推荐
- Spring 源码解析 -- SpringWeb过滤器Filter解析
简介 在上几篇文章中探索了请求处理相关的代码,本篇开始探索请求处理前的一些操作代码,如Filter.本篇探索Filter初始化.请求处理等相关代码. 前言 说先简单的定义相关的测试代码: 启动类: i ...
- Spring源码解析 -- SpringWeb请求参数获取解析
Spring源码解析 – SpringWeb请求参数获取解析 简介 在文章:Spring Web 请求初探中,我们看到最后方法反射调用的相关代码,本篇文章就探索其中的参数是如何从请求中获取的 概览 方 ...
- Spring源码解析 -- SpringWeb请求映射Map初始化
简介 在上篇文章中,大致解析了Spring如何将请求路径与处理方法进行映射,但映射相关的初始化对于我们来说还是一团迷雾 本篇文章就来探索下,请求路径和处理方法的映射,是如何进行初始化的 概览 基于上篇 ...
- Spring源码解析【完整版】--【bilibili地址:https://www.bilibili.com/video/BV1oW41167AV】
[本文为bilibili视频雷丰阳的Spring源码解析的完整版总结文章,其中文章前面大部分为他人博文的搬运,后面补充了其未总结的部分] 一.Java的注解 1. 注解的概念 注释:用文字描述程序,给 ...
- spring源码解读系列(八):观察者模式--spring监听器详解
一.前言 在前面的文章spring源码解读系列(七)中,我们继续剖析了spring的核心refresh()方法中的registerBeanPostProcessors(beanFactory)(完成B ...
- Tomcat源码解析系列二:Tomcat总体架构
Tomcat即是一个HTTP服务器,也是一个servlet容器,主要目的就是包装servlet,并对请求响应相应的servlet,纯servlet的web应用似乎很好理解Tomcat是如何装载serv ...
- Spring源码解析:自定义标签的解析过程
2019独角兽企业重金招聘Python工程师标准>>> spring version : 4.3.x Spring 中的标签分为默认标签和自定义标签两类,上一篇我们探究了默认标签的解 ...
- Netty 源码解析系列-服务端启动流程解析
netty源码解析系列 Netty 源码解析系列-服务端启动流程解析 Netty 源码解析系列-客户端连接接入及读I/O解析 五分钟就能看懂pipeline模型 -Netty 源码解析 1.服务端启动 ...
- Mybatis3 源码解析系列
简介 Mybatis作为一个优秀的Java持久化框架,在我们的日常工作中相信都会用到,本次源码解析系列,就开始探索下Mybatis 总结 在MyBatis的学习中,首先通读了<MyBatis3源 ...
最新文章
- 2022-2028年中国装配式装修行业市场研究及前瞻分析报告
- SAP RETAIL 基于分配表创建采购订单的时候按工厂拆分?
- 联合索引使用规则(转载)
- POJ1177矩形面积并(矩形切割+括号匹配)
- 深受程序员鄙视的外行语录,你都听过吗?
- wordpress 调整段落空两,段落间的距离
- 《AlphaGo世纪对决》与周志华《机器学习》观后感
- arch Linux添加源,在Arch Linux系统中使用Archlinuxcn源(清华源)的方法
- iOS开发之解析XML格式数据
- python能做什么项目-适合Python 新手的5大练手项目,你练了么?
- 学习OpenCV研究报告指出系列(二)源代码被编译并配有实例project
- Webmax简易入门操作手册(一)
- synchronized(this)和synchronized(.class)的理解
- 豆瓣TOP250资源搜索——油猴脚本Tampermonkey
- 银赛电气降低电气开关火灾危险性
- ftp服务器覆盖文件,ftp 覆盖 服务器 文件
- networkx的安装及简单用法
- PyFlink 教程(三):PyFlink DataStream API - state timer
- 学生计算机测评安排,计算机系学生综合测评细则
- Autocad、中望CAD自动加载程序研究(注册表法、acad.rx、acaddoc.lsp或acad.lsp)
热门文章
- 计算机的cpu怎么设计出来的,CPU是如何制作出来的?cpu的制造流程介绍
- jQuery+CSS五类验证码(字母、数字、滑动、点击)
- java寻宝题目,神都夜行录寻宝答题答案大全 挖宝答题答案汇总
- 20220227:力扣第282场周赛(上)
- Enjoy模板里使用layui模板引擎laytpl
- 关于libusb-win32开发的经验
- 智能一代云平台(三十七):Java技术栈
- SpaceX载人龙飞船意外爆炸,据称几乎被完全摧毁
- 照片上的人出来了!云从3D人体重建登顶三项榜单,一张照片就能生成3D形象
- 首个中国AI芯片收购案完成:深鉴创立2年后并入赛灵思