内容简介:今天简单回顾下事件驱动模型。事件驱动模型,也即是我们通常说的观察者。基于发布-订阅模式的编程模型。定义对象间的一种一对多的依赖关,当一个对象的状态发生变化时,所有依赖它的对象都得到通知并自动更新。回顾想想平常自己接触到的事件驱动模型。
今天简单回顾下事件驱动模型。
什么是事件驱动模型
事件驱动模型,也即是我们通常说的观察者。基于发布-订阅模式的编程模型。定义对象间的一种一对多的依赖关,当一个对象的状态发生变化时,所有依赖它的对象都得到通知并自动更新。
事件驱动模型的应用
回顾想想平常自己接触到的事件驱动模型。
-
设计模式里面的观察者模式
-
JDK观察者模式
-
Java GUI事件驱动
-
JavaBean事件驱动
-
spring事件驱动
-
......
JavaBean规范提供了一种监听属性变化的事件驱动模型,提供操作JavaBean属性的类PropertyChangeSupport和PropertyEditorSupport。
spring事件驱动的话,可能你平常也会接触到。比如说订单状态变化的时候,能够通知到邮件服务,短信服务,积分变化等等; 如果你是个新手,想象一下你去实现这个业务的代码怎么去实现?接下来对spring事件驱动这块回顾下。
spring事件驱动
回到上面的问题,一般新人写这块代码,一个UserService里面引入积分Service,短信Service,邮件Service,还有很多很多Service,可能还要调用第3方接口,是不是发现问题所在了。Service耦合严重,代码不方便维护。
那利用spring事件驱动怎么去做呢?
增加了一个Listener来解耦UserService和其他服务,即注册成功后,只需要通知相关的监听器,不需要关系它们如何处理。增删功能非常容易。
这就是一个典型的事件处理模型/观察者,解耦目标对象和它的依赖对象,目标只需要通知它的依赖对象,具体怎么处理,依赖对象自己决定。比如是异步还是同步,延迟还是非延迟等。
上边其实也使用了DIP(依赖倒置原则),依赖于抽象,而不是具体。
回顾一下spring提供的事件驱动模型体系图:
-
ApplicationEvent 事件,你要处理的事件都是来集成它。
-
ApplicationEventPublisher发布事件者,比如上面你要操作积分,短信啥的,都是这个来触发的。
-
注意到有个ApplicationEventMulticaster,这是事件广播,因为事件发布,可以同步,异步等,有很多策略,所以需要Multicaster去封装扩展,统一让它履行协调发送的职责。
-
ApplicationListener监听器, 发布事件肯定需要接收的地方,监听器在一启动的时候,加载到内存,当发布事件,找到对应Listener去接收事件处理业务逻辑;注意到有个Smart监听器,主要是做了顺序优先级等一些扩展。
具体更多想了解的,感兴趣的话可以去看看spring这块源码。
最后提一句:最近在写业务平台组件框架,里面涉及到事件驱动模块。顺带就把这个轻量级事件驱动框架azeroth-event开源了,接下来会做一次优化重构。大家感兴趣的可以点击原文链接去看看。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 聊聊对领域模型的思考
- 能聊聊你对充血模型和贫血模型的理解吗?
- 聊聊Kubernetes计算资源模型(上)——资源抽象、计量与调度
- 聊聊Java中的生产者消费者模型——BlockingQueue
- 聊聊 ab、wrk、JMeter、Locust 这些压测工具的并发模型差别
- 聊聊 ab、wrk、JMeter、Locust 这些压测工具的并发模型差别
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。