小伙伴们好呀~ 今天来和大家分享下这个 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 呀?,这样就可以第一时间收到更文消息啦!