| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> Spring Boot使用ApplicationEvent来实现事件发布订阅功能(美女一个都不能少,都要通知到) - 第420篇 -> 正文阅读 |
|
[Java知识库]Spring Boot使用ApplicationEvent来实现事件发布订阅功能(美女一个都不能少,都要通知到) - 第420篇 |
历史文章(累计400+篇文章) 你真的学会了Lambda表达式了吗?一篇让你学废了不香么 - 第417篇 当你的Stream遇上Lambda就爱上了,超级无敌酷酷!- 第418篇 java8+lambda+Stream api实战案例学彻底透学废 - 第419篇 悟纤:师傅,我发现我最近写的代码耦合度太高了? 师傅:怎么说? 悟纤:师傅你看哦,我这里有新的企业用户注册了,我需要将企业用户的信息保存到数据库,另外呢,我还需要通知到审核人员进行数据的审核,另外还需要发送通知到代理商进行企业用户的跟进。这代码完全耦合在一起了,有没有一种什么的方式可以不耦合在一起呐。 师傅:这个吧,如果使用了MQ的话,那么就很容易解耦了,如果没有使用到又想解耦的话,Spring倒是提供了一种事件发布订阅的方式。 悟纤:这牛牪犇逼。那师傅赶紧跟我讲讲呗。 师傅:来,学习走起~… ? 导读: ???????在很多源码中,会使用到Spring的事件ApplicationEvent,比如Nacos的源码中就用到了很多,心跳监测,然后通知其它的集群节点;节点变化了通知其它的集群节点,如下的代码: ???????然后发布事件之后,被PushService监听处理了: ?????? OK,到这里的代码截图,这个思路你如果都了解的话,那么本节你就可以不用看了。 ???????如果你还没有理清楚,好的,那么你有必要来看看了。 第一篇章 我在朋友圈发布了条信息 ???????我们发布了一条信息到朋友圈,这里使用Controller进行模拟:
???????启动SpringBoot应用,现在就是简单的在控制台进行打印了。 第二篇章 我想让关注我的人收到我的信息 ???????朋友圈自己玩肯定是没啥意思了,我是希望我发布了之后,那些关注我的人可以收到我的最新动态,然后给我点个赞,于是当我在朋友圈发布信息之后,我发布了一个我信息更新的事件:
第三篇章 谷爱凌关注我了 ???????谷爱凌关注了我的朋友圈,那么对于关注我的人只要监听我消息发布的事件,一旦我发布了事件之后,那么就能够收到我的最新的消息了:
第四篇章 我发布了一条新的信息 ???????我们对于发布信息的地方做个修改,我们需要发布一个事件:
???????这里的发布事件主要是使用了applicationContext的publishEvent进行发布的。 ???????运行下程序,访问如下地址: http://127.0.0.1:8080/me/publishMsg?message=今天你真棒 ???????查看控制台: ???????到这里我们就实现了Spring的事件监听了。 ApplicationEvent总结 1>??ApplicationEvent是什么? ApplicationEvent以及Listener是Spring为我们提供的一个事件监听、订阅的实现,内部实现原理是观察者设计模式,设计初衷也是为了系统业务逻辑之间的解耦,提高可扩展性以及可维护性。 2>??Spring事件发布监听机制 ? ? ? ? ? ? ? ? ? ? ? ? ? ? 流程:当事件源(发布者)发布事件时,相应监听此事件的监听者接收到事件对象并且进行处理Spring的事件发布监听机制本质上就是发布-订阅,即生产者-消费者,也体现了设计模式中的观察者模式。 1>??ApplicationEvent使用步骤 (1)事件(ApplicationEvent):创建ApplicationEvent事件 (2)事件发布者(ApplicationEventPublisher):事件发布 (3)事件监听者(ApplicationListener):创建ApplicationListener事件监听 ???????说明:没有事件监听也不影响程序的运行。 ???????辅助理解:我们有一个事件要发布,那么就要有一个发布者的角色,那么事件发布了,被谁处理或者说被谁监听呐,那么就需要监听者的角色。所以: ???????事件发布者(ApplicationEventPublisher)发布了一个事件(ApplicationEvent)被某些事件监听者(ApplicationListener)监听处理。 (1)如何定义事件:继承(extends)类ApplicationEvent。 (2)如何发布事件:使用applicationContext的publishEvent进行发布事件。比如: applicationContext.publishEvent(newMessageUpdateApplicationEvent(message)); (3)如何监听事件:实现(implements)接口ApplicationListener<T>的onApplicationEvent()方法。 ? 2>??ApplicationEvent的益处 一个是很好的解耦。减少模块之间的依赖,也可以做消息传播,广播等。去触发某一个事件。
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 7:51:33- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |