前两天看spring Event 与Listener 一直不知道到底能用在什么地方,就从本质上的区别来思考,传统的方式就是过程处理,一个完成调用另一个处理,Event和Listener则是把前者和后者分开,达到一种解耦,考虑到它本事就是发布订阅模式,所以网上找到这篇文章,看了彻底明白了,跟我理解我完全一致。
请阅读:http://blog.sina.com.cn/s/blog_86be1b7c0100vcw6.html
发布订阅就是为了解耦,把复杂的关系得到控制,是发布端relase了,接收端也根据自己感兴趣的事件处理自己相关的业务。
对于单线程业务,没有事物控制顾虑,
对于多线程业务,比如网页注册后,发短信,可能是另起线程发短信。也不用去控制事物,之前的顾虑仔细一想,也没有了,ok。哈哈
转自:http://blog.sina.com.cn/s/blog_86be1b7c0100vcw6.html
一、 订阅杂志
我们很多人都订过杂志,其过程很简单。只要告诉邮局我们所要订的杂志名、投递的地址,付了钱就OK。出版社定期会将出版的杂志交给邮局,邮局会根据订阅的列表,将杂志送达消费者手中。这样我们就可以看到每一期精彩的杂志了。
仔细思考一下订杂志的过程,我们会发现这样几个特点:
1、 消费者订杂志不需要直接找出版社;
2、 出版社只需要把杂志交给邮局;
3、 邮局将杂志送达消费者。
邮局在整个过程中扮演了非常重要的中转作用,在出版社和消费者相互不需要知道对方的情况下,邮局完成了杂志的投递。
二、 发布-订阅消息模式
刚刚讲了订阅杂志,下面我们会讲传统调用模式演化到发布-订阅消息模式。
有些网站在注册用户成功后发一封激活邮件,用户收到邮件后点击激活链接后才能使用该网站。一般的做法是在注册用户业务逻辑中调用发送邮件的逻辑。这样用户业务就依赖于邮件业务。如果以后改为短信激活,注册用户业务逻辑就必须修改为调用发送短信的逻辑。如果要注册后给用户加点积分,再加一段逻辑。经过多次修改,我们发现很简单的注册用户业务已经越来越复杂,越来越难以维护。相信很多开发者都会有类似痛苦的经历。
即使用户业务实现中对其他业务是接口依赖,也避免不了业务变化带来的依赖影响。怎么办?解耦!将注册用户业务逻辑中注册成功后的处理剥离出来。
再回头看看“订阅杂志”,如果没有邮局,出版社就必须自己将杂志送达所有消费者。这种情形就和现在的注册用户业务一样。我们发现问题了,在用户业务和其他业务之间缺少了邮局所扮角色。
我们把邮局抽象成一个管理消息的地方,叫“消息管理器”。注册用户成功后发送一个消息给消息管理器,由消息管理器转发该消息给需要处理的业务。现在,用户业务只依赖于消息管理器了,它再也不会为了注册用户成功后的其他处理而烦恼。
注册用户的改造就是借鉴了“订阅杂志”这样原始的模式。我们再进一步抽象,用户业务就是消息的“生产者”,它将消息发布到消息管理器。邮件业务就是消息的“消费者”,它将收到的消息进行处理。邮局可以订阅很多种杂志,杂志都是通过某种编号来区分;消息管理器也可以管理多种消息,每种消息都会有一个“主题”来区分,消费者都是通过主题来订阅的。
发布-订阅消息模式已经呈现在我们面前,利用它可以产生更灵活、更松散耦合的系统。
分享到:
相关推荐
Spring AOP,即Spring的面向切面编程模块,是Spring框架的重要组成部分,它允许开发者在不修改源代码的情况下,对程序进行功能增强或统一处理。在这个主题中,我们主要关注四个核心的jar包,它们是实现Spring AOP...
Spring 4.x 是一个重要的Java框架,专注于简化企业级应用程序开发。这个版本的Spring框架引入了许多新特性,改进和优化,以适应不断变化...无论是传统的MVC模式,还是现代的微服务架构,Spring 4.x都能提供有力的支持。
【标题】"Maven 整合SringMVC及MyBatis" 在现代Java开发中,Maven、SpringMVC和MyBatis是常见的技术栈,它们分别负责项目构建、Web层控制和数据访问。Maven作为一个强大的项目管理工具,能够帮助开发者管理依赖、...
MATLAB设计
c语言打字母游戏源码
c语言做的一个任务管理器
JetBra-2021.1.x-重置.mp4.zip
内容概要:本文围绕小学班主任与家长沟通的现状进行了详尽分析,揭示了沟通方式不当、频率低、内容片面及理念不一致等问题,并基于访谈、文献研究及案例分析,提出了多元化的沟通方式、丰富沟通内容、讲究沟通艺术、转变家长观念和完善制度等多项策略,旨在提高家校合作的效能。 适合人群:从事小学教育教学的班主任、教师以及对家校合作感兴趣的教育工作者。 使用场景及目标:①通过本文提出的多种策略,改善小学班主任与家长之间的沟通;②促进家校互动,助力学生健康成长和发展;③推动教育领域的研究与发展。 阅读建议:本文详细阐述了沟通现状及具体问题,适合系统阅读。读者可根据实际情况,挑选适用于自身的沟通策略实施,并结合实例进行反思与改进。
WSL批量压缩MP4文件对应Shell脚本文件
本项目是一个基于Java SSM框架的社区疫情防控管理系统,旨在通过信息化手段提升社区疫情防控的效率和准确性。系统集成了居民信息管理、健康监测、疫情上报、隔离管理等多项功能,能够实时跟踪和记录社区居民的健康状况,及时发现潜在的风险人员,并对其进行有效的隔离和管理。系统采用了Spring、Spring MVC和MyBatis三大框架技术,确保了系统的稳定性和扩展性。通过前端页面与后端逻辑的紧密配合,系统实现了数据的动态展示和交互操作,极大地方便了社区工作人员的日常工作。此外,系统还具备强大的数据统计和分析功能,能够帮助管理人员全面掌握社区的疫情动态,制定科学合理的防控措施。项目为完整毕设源码,先看项目演示,希望对需要的同学有帮助。
Motorcad 外转子式42极36槽 永磁同步电机,直流无刷电机设计案例,。 该电机55kw,220rpm,功率密度较高
labview控制 西门子S7-1200 1214 dcdcdcplc 程序 plc只需要设置连接机制与IP即可 通讯为TCP IP协议
城市驾驶舱解决方案.pdf
Shell是一种用C语言编写的程序,它作为用户与Unix/Linux系统之间的桥梁,使得用户可以通过Shell完成大部分工作。Shell既是一个命令语言,也是一个程序设计语言。 本书《Shell教程》以简洁明了的语言向读者介绍Shell编程,旨在帮助读者迅速掌握Shell编程技能,并能够编写出实用的程序和代码,特别适合初学者学习。 **目录** - **前言** - **第1章 Shell简介** - 介绍Shell及其命令的两种执行方式。 - **第2章 常见的Shell类型** - **第3章 Shell与编译型语言的对比** - **第4章 Shell的使用场景** - **第5章 编写第一个Shell脚本** - **第6章 Shell变量** - 包括Shell变量的定义、删除、只读变量以及变量类型。 - **第7章 Shell特殊变量** - 讨论Shell中的$0, $#, $*, $@, $?, $$等特殊变量及其与命令行参数的关系。 - **第8章 Shell替换** - **第9章 Shell运算符** - 包括算数运算符、关系运算符、布尔运算
CNC编程员个人简历模板
机械设计摇摆喂料机 sw21全套设计资料100%好用.zip
中医养生,拍打经络操全身轻松百病除
【软件介绍】:趣味数学是一款完全免费的数学学习软件,无需注册登录,界面简约纯净。它支持多种分类学习,如趣味数学、数学初练、应用计算、数字推理、图形推理、数字2048、题目练习和数学知识等。其中,趣味数学含154个题目和关卡,数学初练含75个题目,应用计算含310个题目,数字推理含260个题目,图形推理含116个题目,数字2048含79个关卡。题目练习功能可按初中、高中选择,并细分学期与题目类型。数学知识合集功能涵盖初中和高中的各种知识点,共100个高中学习章节,每个章节包含多个知识点。软件不仅提供丰富的数学知识学习,还支持多类型的数学刷题,所有题目均配有答案和解析。
【作品名称】:基于Java 实现的Android手机平台的背单词软件,利用手机解锁记忆单词。锁屏背单词力争帮大家合理地利用好碎片时间,把原本无用的时间变得有用,把没有意义的事情(解锁)变得有意义 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: 主要功能 (1)背单词解锁:锁屏界面滑动单词解锁。 (2)语音朗读:单词真人发音。 (3)复习单词:内置专业的复习功能,有效巩固单词。 (4)学习记录:记录每日解锁次数和学习量,鼓励督促学习。 (5)生词本:卡片堆叠式记录学习不熟练和答错的单词并复习。 (6)词句翻译:查询陌生词句,了解释义与读音。 (7)锁屏壁纸选择:可选默认壁纸,也可选取手机相册照片作为锁屏壁纸。 (8)名人名句:每日一句名人名句。 【资源声明】:本资源作为“参考资料”而不是“定制需求”,代码只能作为参考,不能完全复制照搬。需要有一定的基础看懂代码,自行调试代码并解决报错,能自行添加功能修改代码。
本项目是围绕智慧旅游平台开发的微信小程序,旨在为游客提供更为便捷、全面的旅游信息服务。通过该小程序,用户可以轻松查询旅游景点信息、预订门票和酒店,同时还能获取实时天气、交通指南等实用数据,极大提升了旅游的便利性和趣味性。 在功能方面,小程序集成了地图导航、旅游攻略、在线支付等多项实用功能,用户可以根据自身需求灵活选择使用。框架方面,项目采用了微信小程序原生开发框架,确保了良好的用户体验和流畅的操作性能。 此外,该项目还融入了数据分析功能,帮助旅游管理部门更好地了解游客需求,优化旅游资源配置。项目的开发不仅锻炼了学生的实践能力,也为智慧旅游平台的建设提供了有力支持。项目为完整毕设源码,先看项目演示,希望对需要的同学有帮助。