zoukankan      html  css  js  c++  java
  • spring-事件通知实现

    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来保证线程安全性。。。

  • 相关阅读:
    控制反转和依赖注入
    共识机制是什么?
    实用拜占庭容错算法PBFT
    三种框架对比react vue 和Angular对比
    go语言学习笔记
    激活方法总结
    钱包助记词
    简历中存在的问题的处理
    why we use Symbols in Hash
    compact过滤数组中的nil
  • 原文地址:https://www.cnblogs.com/zhaoxinshanwei/p/9019947.html
Copyright © 2011-2022 走看看