聊聊事件驱动模型

栏目: 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开源了,接下来会做一次优化重构。大家感兴趣的可以点击原文链接去看看。


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

查看所有标签

猜你喜欢:

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

Building Websites with Joomla!

Building Websites with Joomla!

H Graf / Packt Publishing / 2006-01-20 / USD 44.99

This book is a fast paced tutorial to creating a website using Joomla!. If you've never used Joomla!, or even any web content management system before, then this book will walk you through each step i......一起来看看 《Building Websites with Joomla!》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

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

HTML 编码/解码

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

HEX HSV 互换工具