小伙伴们好呀~ 今天来和大家分享下这个 Spring事件机制
内容概览
原理
这个熟悉 观察者模式 的小伙伴应该一眼就看出来啦~
其实就是个简单版的 发布-订阅模式
有三个核心类?
事件 ApplicationEvent
事件发布器 ApplicationEventPublisher
事件监听器 ApplicationListener
用途?
事件发布器发布事件,监听器监听到对应的事件后做出相应的反应~
为什么使用
因为需求也不确定 ?
场景
领导:想在用户操作完后发个邮件通知下A
我:好的
几天后……
领导:算了,先站内提醒就好了,后面再考虑发短信通知啥的,看看哪个效果好点
我:……好的
一开始我也没用这个事件机制的,没多想就写一起了
后面觉得有点不对劲,才想起来用这招的?
优点?
解耦 可以将业务代码和发邮件,站内提醒,短信等进行分离
异步通知 不用等待这些事件的完成
提高扩展性 后面再扩展其他操作也方便多啦
提醒
体量小的系统还可以用,大点的还是直接用消息中间件去解决靠谱
项目实战
功能
根据小伙伴反馈事件去发送短信和邮件
主要源码
一. 小伙伴反馈事件 ReaderFeedbackEvent
特点和作用?
继承
ApplicationEvent,保存反馈信息的DTO
二. 事件发布器 ReaderFeedbackEventPublisher
特点和作用?
实现
ApplicationEventPublisherAware这个接口,获取ApplicationEventPublisher事件发布器去发布事件
三. 监听 ReaderFeedbackEvent 事件并发送邮件
特点和作用?
实现
ApplicationListener这个接口,获取事件中的反馈信息,并发送邮件
四. 当反馈信息有点赞时才发送短信通知?
特点和作用?
监听器的第二种写法—— 注解 ,比较方便,这里监听并判断是不是点赞,再去发送短信?
测试
这里直接在 IDEA 中进行测试,
效果如下?
like = false
like = true
收到的短信
小结
可以看到功能模块很简单,监听反馈事件,然后去发送短信和邮件~
这部分代码上传到我的
GitHub仓库啦 (地址在文末),有兴趣的小伙伴可以去看看, 喜欢的话顺手给个star呀,感谢!?
Spring源码解读
异步/同步
这里我们打个断点,就可以轻易的来到这里啦 ?
这个方法在事件多播器 SimpleApplicationEventMulticaster 中,可以看到当有配置这个线程池时,是走异步通知路线的
那怎么调用监听器的呢?
可以看到就这简单3步 ,最后就是回到我们的 onApplicationEvent 方法中去处理的
invokeListener ——> doInvokeListener ——> onApplicationEvent
总结
活学活用,快去试试叭!?
项目地址?: https://github.com/Java4ye/springboot-demo-4ye
喜欢的话,麻烦点个小星星呀⭐⭐?
本期思维导图如下?
ps:最近忙起来啦,更文速度会慢一些哦~ ?
喜欢的话关注公众号 Java4ye 支持下 4ye 呀?,这样就可以第一时间收到更文消息啦!