聊聊事件驱动模型

栏目: Java · 发布时间: 5年前

内容简介:今天简单回顾下事件驱动模型。事件驱动模型,也即是我们通常说的观察者。基于发布-订阅模式的编程模型。定义对象间的一种一对多的依赖关,当一个对象的状态发生变化时,所有依赖它的对象都得到通知并自动更新。回顾想想平常自己接触到的事件驱动模型。

今天简单回顾下事件驱动模型。

什么是事件驱动模型

事件驱动模型,也即是我们通常说的观察者。基于发布-订阅模式的编程模型。定义对象间的一种一对多的依赖关,当一个对象的状态发生变化时,所有依赖它的对象都得到通知并自动更新。

事件驱动模型的应用

回顾想想平常自己接触到的事件驱动模型。

  1. 设计模式里面的观察者模式

  2. JDK观察者模式

  3. Java GUI事件驱动

  4. JavaBean事件驱动

  5. spring事件驱动

  6. ......

JavaBean规范提供了一种监听属性变化的事件驱动模型,提供操作JavaBean属性的类PropertyChangeSupport和PropertyEditorSupport。

spring事件驱动的话,可能你平常也会接触到。比如说订单状态变化的时候,能够通知到邮件服务,短信服务,积分变化等等; 如果你是个新手,想象一下你去实现这个业务的代码怎么去实现?接下来对spring事件驱动这块回顾下。

spring事件驱动

回到上面的问题,一般新人写这块代码,一个UserService里面引入积分Service,短信Service,邮件Service,还有很多很多Service,可能还要调用第3方接口,是不是发现问题所在了。Service耦合严重,代码不方便维护。

那利用spring事件驱动怎么去做呢?

增加了一个Listener来解耦UserService和其他服务,即注册成功后,只需要通知相关的监听器,不需要关系它们如何处理。增删功能非常容易。

这就是一个典型的事件处理模型/观察者,解耦目标对象和它的依赖对象,目标只需要通知它的依赖对象,具体怎么处理,依赖对象自己决定。比如是异步还是同步,延迟还是非延迟等。

上边其实也使用了DIP(依赖倒置原则),依赖于抽象,而不是具体。

回顾一下spring提供的事件驱动模型体系图:

聊聊事件驱动模型

  1. ApplicationEvent 事件,你要处理的事件都是来集成它。

  2. ApplicationEventPublisher发布事件者,比如上面你要操作积分,短信啥的,都是这个来触发的。

  3. 注意到有个ApplicationEventMulticaster,这是事件广播,因为事件发布,可以同步,异步等,有很多策略,所以需要Multicaster去封装扩展,统一让它履行协调发送的职责。

  4. ApplicationListener监听器,  发布事件肯定需要接收的地方,监听器在一启动的时候,加载到内存,当发布事件,找到对应Listener去接收事件处理业务逻辑;注意到有个Smart监听器,主要是做了顺序优先级等一些扩展。

具体更多想了解的,感兴趣的话可以去看看spring这块源码。

最后提一句:最近在写业务平台组件框架,里面涉及到事件驱动模块。顺带就把这个轻量级事件驱动框架azeroth-event开源了,接下来会做一次优化重构。大家感兴趣的可以点击原文链接去看看。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Ruby Programming Language

The Ruby Programming Language

David Flanagan、Yukihiro Matsumoto / O'Reilly Media, Inc. / 2008 / USD 39.99

Ruby has gained some attention through the popular Ruby on Rails web development framework, but the language alone is worthy of more consideration -- a lot more. This book offers a definition explanat......一起来看看 《The Ruby Programming Language》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具