ok,今天不知道看啥来着,突然想起来spring内部的事件通知的实现,其实比较简单,简要记一下。然后又回顾了下eventbus的实现,其实俩者的实现方式大同小异吧,只是spring的很多操作都可以直接基于底层的ioc容器,可以带来一部分的便利性。

事件通知无非是listener的注册,还有事件的分发俩部分。

listener的注册嘛,比较简单,在spring里的操作只是简单的把listener对象放到了map里,然后把retriver的cache清空。retriver的cache的作用是存放event类型和它对应的listener的映射关系,方便在分发事件的时候,直接找到这个event类型的订阅者。

在eventbus里的话,对这个新的listener做了一些分析吧,比如哪个方法来接收事件,接收的事件的类型是什么,然后把这个映射关系直接存起来。

事件分发的话,流程也基本是固定的,找到这个事件类型的订阅者,然后挨个通知就好了。在spring里的话,如果retriver的cache里没有的话,会对listener重新进行解析,再把这个关系建立起来。在eventbus里就直接用了,不需要再建立这个映射关系。

eventbus里在分发事件的时候,设置了一个queue来做缓冲队列,作用是什么,不是很理解。。。

我刚看了下,其实是比较疑惑的,这个eventsToDispatch这个queue貌似没有必要啊,就算不通过这个queue也是线程安全的。加了这个queue反而需要用ThreadLocal来保证线程安全性。。。

spring-事件通知实现的更多相关文章

  1. spring事件通知机制详解

    优势 解耦 对同一种事件有多种处理方式 不干扰主线(main line) 起源 要讲spring的事件通知机制,就要先了解一下spring中的这些接口和抽象类: ApplicationEventPub ...

  2. Spring事件通知机制

    在上图中,调用 getApplicationEventMulticaster()方法,该方法返回的ApplicationEventMulticaster类型的对象applicationEventMul ...

  3. spring发布和接收定制的事件(spring事件传播)

    spring发布和接收定制的事件(spring事件传播) 2012-12-26 20:05 22111人阅读 评论(2) 收藏 举报  分类: 开源技术(如Struts/spring/Hibernat ...

  4. Spring 事件

    JDK事件 java通过java.util.EventObject类和java.util.EventListener接口描述事件和监听器 事件源,事件的产生者,任何一个EventObject都必须拥有 ...

  5. spring事件机制

    前置知识补充: 程序里面所谓的“上下文”就是程序的执行环境,打个比方:你就相当于web程序,你的房子就相当于web程序的上下文,你可以在家里放东西,也可以取东西,你的衣食住行都依赖这个房子,这个房子就 ...

  6. spring发布和接收定制的事件(spring事件传播)[转]

    有事件,即有事件监听器. 有人问你spring监听器有哪些你看了下文即也知道了.   事件传播 ApplicationContext基于Observer模式(java.util包中有对应实现),提供了 ...

  7. Spring事件机制详解

    一.前言 说来惭愧,对应Spring事件机制之前只知道实现 ApplicationListener 接口,就可以基于Spring自带的事件做一些事情(如ContextRefreshedEvent),但 ...

  8. 从spring源码汲取营养:模仿spring事件发布机制,解耦业务代码

    前言 最近在项目中做了一项优化,对业务代码进行解耦.我们部门做的是警用系统,通俗的说,可理解为110报警.一条警情,会先后经过接警员.处警调度员.一线警员,警情是需要记录每一步的日志,是要可追溯的,比 ...

  9. Redis事件通知示例

    1. redis如同zk一样,提供了事件监听(或者说是回调机制), 下面是redis的配置说明: ############################# EVENT NOTIFICATION ## ...

  10. springcloud Eureka设置服务下线上线事件通知

    最近由于微服务会莫名其妙挂掉,导致一些服务宕机: 固所以寻找解决办法,莫名宕机暂时还未查明原因,先人肉解决办法 Eureka的server端会发出5个事件通知,分别是: EurekaInstanceC ...

随机推荐

  1. hdu 1686 & poj 2406 & poj 2752 (KMP入门三弹连发)

    首先第一题 戳我穿越;http://acm.hdu.edu.cn/showproblem.php?pid=1686 题目大意好理解,每组输入一个子串和一个母串,问在母串中有多少个子串? 文明人不要暴力 ...

  2. Java.WeakReference-SoftReference-PhantomReference

    Weak Reference, Soft Reference, Phantom Reference 1. Introduction "Weak reference objects, whic ...

  3. 虚拟机安装centos7, 再安装gitlab 简单步骤

    先安装Linux centos7(朋友贡献的. Linux官网有下) 我自己用vm安装的. 未出现特殊状况 gitlab的搭建 安装基础包 yum -y install curl policycore ...

  4. Python中特殊函数和表达式lambda,filter,map,reduce

    1.lambda:使用lambda表达式可以定义一个匿名函数 lambda表达式是一种简洁格式的函数.该表达式不是正常的函数结构,而是属于表达式的类型 (1)基本格式: lambda 参数,参数... ...

  5. POJ 2449Remmarguts' Date 第K短路

    Remmarguts' Date Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 29625   Accepted: 8034 ...

  6. 9款原型设计工具与Sketch的强强组合,轻松构建交互原型!

    原型设计的发展历史经历了纸上原型.静态线框设计.到现在的可交互式原型.作为设计过程中最初始的阶段,设计师们对原型设计的要求也越来越高.因此,如今的原型设计工具格局也发生了很大的变化. Sketch对于 ...

  7. Previous Permutation

    Similar to next permutation, the steps as follow: 1) Find k in the increasing suffix such that nums[ ...

  8. ubuntu配置ftp server

    ubuntu配置ftp server 1. 安装vsftpd   sudo apt-get install vsftpd 安装后会自动新建一个用户ftp,密码ftp,作为匿名用户登录的默认用户 sud ...

  9. 【Linux】OpenSSL 安装

    OpenSSL 简介 OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法.常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用. OpenSSL 安装 环境:L ...

  10. Java语法基础课 动手动脑

    1.枚举类型 它的每个具体值都引用一个特定的对象.相同的值则引用同一个对象. 枚举类型不是java原有数据类型 2.为什么double类型的数值进行运算得不到“数学上精确”的结果? 我们给出的数值,在 ...