聊聊事件驱动模型

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

什么是事件驱动模型

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

事件驱动模型的应用

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

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

原文 

https://mp.weixin.qq.com/s?__biz=MjM5NjA3MTQ4OA==&mid=2651715939&idx=1&sn=9d75066bb13fc1a9a59b6c1ebd3e466f&chksm=bd17884c8a60015a5bfe809ccdf497b6e819bd770f3b013eb5c42925d7445ff4ceac43938347&token=874714225&lang=zh_CN

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » 聊聊事件驱动模型

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址