三分钟快速上手Spring事件机制

原创
08/29 14:54
阅读数 3.1K

小伙伴们好呀~ 今天来和大家分享下这个 Spring事件机制

内容概览

image-20210829132019387

原理

image-20210828184103069

这个熟悉 观察者模式 的小伙伴应该一眼就看出来啦~

其实就是个简单版的 发布-订阅模式

有三个核心类👇

  1. 事件 ApplicationEvent
  2. 事件发布器 ApplicationEventPublisher
  3. 事件监听器 ApplicationListener

用途👇

事件发布器发布事件,监听器监听到对应的事件后做出相应的反应~

为什么使用

因为需求也不确定 🙄

场景

领导:想在用户操作完后发个邮件通知下A

我:好的

几天后……

领导:算了,先站内提醒就好了,后面再考虑发短信通知啥的,看看哪个效果好点

我:……好的

一开始我也没用这个事件机制的,没多想就写一起了

后面觉得有点不对劲,才想起来用这招的😄

优点👇

  1. 解耦 可以将业务代码和发邮件,站内提醒,短信等进行分离
  2. 异步通知 不用等待这些事件的完成
  3. 提高扩展性 后面再扩展其他操作也方便多啦

提醒

体量小的系统还可以用,大点的还是直接用消息中间件去解决靠谱

项目实战

image-20210829102043376

功能

根据小伙伴反馈事件去发送短信和邮件

主要源码

一. 小伙伴反馈事件 ReaderFeedbackEvent

image-20210829094311899

特点和作用👇

继承 ApplicationEvent ,保存反馈信息的DTO

二. 事件发布器 ReaderFeedbackEventPublisher

image-20210829102353506

特点和作用👇

实现 ApplicationEventPublisherAware 这个接口,获取 ApplicationEventPublisher 事件发布器去发布事件

三. 监听 ReaderFeedbackEvent 事件并发送邮件

image-20210829102540185

特点和作用👇

实现 ApplicationListener 这个接口,获取事件中的反馈信息,并发送邮件

四. 当反馈信息有点赞时才发送短信通知😄

image-20210829102736577

特点和作用👇

监听器的第二种写法—— 注解 ,比较方便,这里监听并判断是不是点赞,再去发送短信😝

测试

这里直接在 IDEA 中进行测试,

image-20210829111125716

效果如下👇

like = false

image-20210829111409325

like = true

image-20210829124910499

收到的短信

小结

可以看到功能模块很简单,监听反馈事件,然后去发送短信和邮件~

image-20210829130532523

这部分代码上传到我的 GitHub 仓库啦 (地址在文末)😝

Spring源码解读

异步/同步

这里我们打个断点,就可以轻易的来到这里啦 👇

image-20210829104327436

这个方法在事件多播器 SimpleApplicationEventMulticaster 中,可以看到当有配置这个线程池时,是走异步通知路线的

那怎么调用监听器的呢?

可以看到就这简单3步 ,最后就是回到我们的 onApplicationEvent 方法中去处理的

invokeListener ——> doInvokeListener ——> onApplicationEvent

image-20210829104759111

总结

活学活用,快去试试叭!😆

项目地址👉:https://github.com/Java4ye/springboot-demo-4ye

喜欢的话,点个小星星呀⭐⭐😝

image-20210829144304728

本期思维导图如下👇

image-20210829132531501

ps:最近忙起来啦,更文速度会慢一些哦~ 🐷

我是4ye 咱们下期应该……很快再见!! 😆

喜欢的话可以关注下公众号 Java4ye 支持下 4ye 呀😝



往期推荐

Spring的这七大模块你了解吗?

这5个GitHub项目+3个网站,助你一飞冲天!

三分钟快速了解Spring中的工厂模式

简单两步搞定Springboot自定义starter

花了2个钟才搞懂这AOP为啥没生效,水友却睡着了……

四种引用类型在Springboot中的使用

Springboot自动装配原理探索

Cglib动态代理探索(ASM,Spring)

Java代理模式和字节码的探索

服务发现机制SPI居然是破坏者?!



本文分享自微信公众号 - Java4ye(Java4ye)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
2
5 收藏
分享
加载中
Java4ye博主
小伙伴们可以自己上 github 拉下代码试试哦,实践出真理,另外这个 事件模型 和 MQ 的 发布订阅 模型是有区别的 ? 重复消费的点在哪里?这个我先埋个坑,抽空再写下 (PS:欢迎关注公众号 Java4ye )😆
09/03 16:30
回复
举报
对spring熟悉的可私我中间件
09/02 19:44
回复
举报
Java4ye博主
😅
09/02 22:38
回复
举报
如果布署了多台,这样会重复发送吧。
09/02 15:50
回复
举报
Java4ye博主
你说的是怎么部署的呀
09/02 22:44
回复
举报
集群的意思吧
09/03 15:00
回复
举报
Java4ye博主
你觉得集群就会重复发送吗(~ ̄▽ ̄)~
09/03 16:00
回复
举报
实用技巧
09/02 15:25
回复
举报
Java4ye博主
小技巧~
09/02 22:37
回复
举报
更多评论
打赏
9 评论
5 收藏
2
分享
返回顶部
顶部