如何实现Application event,观察者模式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何实现Application event,观察者模式相关的知识,希望对你有一定的参考价值。

参考技术A

spring 事件为bean 与 bean之间传递消息。一个bean处理完了希望其余一个接着处理.这时我们就需要其余的一个bean监听当前bean所发送的事件.

spring事件使用步骤如下:

1.先自定义事件:你的事件需要继承 ApplicationEvent

2.定义事件监听器: 需要实现 ApplicationListener

3.使用容器对事件进行发布

最后有一个思考 :ApplicationEvent事件执行部分和起一个TaskExecutor去执行 有啥区别吗?反正都是异步。

可以这样实现;

还可以这样实现;

我的思考:ApplicationEvent是观察者设计模式,这种设计模式使得主题和观察者之间的耦合度降低,松耦合是面向对象设计中很重要的一个原则,最终也是使用@Async来实现异步。而TaskExecutor则是启动一个线程池任务异步执行任务,两者效果一样,但原理不同。

通过我的思考,又带来一个疑问:那观察者模式是不是就是我们MQ中的发布订阅模式呢?只不过观察者模式是进程内的,而MQ是跨进程的?就这唯一的区别吗?

经过一些资料的查阅:大多数地方观察者模式 约等于 发布订阅模式,但是观察者模式是由具体目标调度的,而发布/订阅模式是统一由调度中心调的,所以观察者模式的订阅者与发布者之间是存在依赖的,而发布/订阅模式则不会。
所以说观察者模式是小米加步枪,发布订阅模式是95式自动步枪,是它的进化版!

以上是关于如何实现Application event,观察者模式的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot Event 观察者模式,轻松带你实现业务解耦!

观察者模式--自定义事件

Orchard源码分析(4.3):Orchard.Events.EventsModule类(Event Bus)

JavaScript事件详解-zepto的事件实现

c++ 设计模式5 (Observer / Event 观察者模式)

事件(Application Event)