Spring的事件驱动模型由三部分组成:

  • 事件(消息):ApplicationEvent,继承自JDK的EventObject,所有事件将继承它,并通过source得到事件源。
  • 事件发布者(生产者):ApplicationEventPublisher(一般用这个)及ApplicationEventMulticaster接口,使用这个接口,我们的Service就拥有了发布事件的能力。
  • 事件订阅者(消费者):ApplicationListener,继承自JDK的EventListener,所有监听器将继承它。

下面写一个小例子:

1.事件(消息)    继承自ApplicationEvent


import org.springframework.context.ApplicationEvent;/*** 类似于 Message* 相当于-Rabbitmq的message-一串二进制数据流* */
public class PushOrderRecordEvent extends ApplicationEvent{private String orderNo;private String orderType;public PushOrderRecordEvent(Object source, String orderNo, String orderType) {super(source);this.orderNo = orderNo;this.orderType = orderType;}public String getOrderNo() {return orderNo;}public void setOrderNo(String orderNo) {this.orderNo = orderNo;}public String getOrderType() {return orderType;}public void setOrderType(String orderType) {this.orderType = orderType;}@Overridepublic String toString() {return "PushOrderRecordEvent{" +"orderNo='" + orderNo + '\'' +", orderType='" + orderType + '\'' +'}';}
}

2.事件发布者(生产者)  使用ApplicationEventPublisher接口

    @RequestMapping(value = "/push",method = RequestMethod.GET)public BaseResponse pushOrder(){try {//根据上面消息类,新建一个消息PushOrderRecordEvent event=new PushOrderRecordEvent(this,"orderNo_20180821001","物流12");//使用ApplicationEventPublisher这个接口把消息发送出去publisher.publishEvent(event);}catch (Exception e){log.error("异常:");}return response;}

3. 事件订阅者(消费者):实现ApplicationListener

泛型为事件(消息) :PushOrderRecordEvent

小知识:@component (把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>)

@Component
public class PushOrderRecordListener implements ApplicationListener<PushOrderRecordEvent>{private static final Logger log= LoggerFactory.getLogger(PushOrderRecordListener.class);@Autowiredprivate OrderRecordMapper orderRecordMapper;@Overridepublic void onApplicationEvent(PushOrderRecordEvent event) {log.info("监听到的记录是: {} ",event);}
}

Spring中的事件机制相关推荐

  1. 浅析 Spring 中的事件驱动机制

    今天来简单地聊聊事件驱动,其实写这篇文章挺令我挺苦恼的,因为事件驱动这个名词,我没有找到很好的定性解释,担心自己的表述有误,而说到事件驱动可能立刻联想到如此众多的概念:观察者模式,发布订阅模式,消息队 ...

  2. 一文读懂SpringBoot中的事件机制

    一文读懂SpringBoot中的事件机制?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法. 要"监听"事件,我们总是 ...

  3. 「前端面试题系列7」Javascript 中的事件机制(从原生到框架)

    前言 这是前端面试题系列的第 7 篇,你可能错过了前面的篇章,可以在这里找到: 理解函数的柯里化 ES6 中箭头函数的用法 this 的原理以及用法 伪类与伪元素的区别及实战 如何实现一个圣杯布局? ...

  4. jQuery中的事件机制深入浅出

    昨天呢,我们大家一起分享了jQuery中的样式选择器,那么今天我们就来看一下jQuery中的事件机制,其实,jQuery中的事件机制与JavaScript中的事件机制区别是不大的,只是,JavaScr ...

  5. 一文读懂Spring中的AOP机制

    一.前言 这一篇我们来说一下 Spring 中的 AOP 机制,为啥说完注解的原理然后又要说 AOP 机制呢? 1.标记日志打印的自定义注解 @Target({ElementType.METHOD}) ...

  6. 三种方式实现观察者模式 及 Spring中的事件编程模型

    观察者模式可以说是众多设计模式中,最容易理解的设计模式之一了,观察者模式在Spring中也随处可见,面试的时候,面试官可能会问,嘿,你既然读过Spring源码,那你说说Spring中运用的设计模式吧, ...

  7. 敲响OO时代的丧钟——DJ中的事件机制(重写)

    最近一直在思考DJ中的事件机制的设计问题,觉得以前的设计并不够好,关键在于概念还不够清晰,因此语法的设计也不够干净利落.因此我打算重写一遍关于事件机制的语法设定. 事件的本质是在一个系统运行过 ...

  8. Spring 与 Spring Boot 中的事件机制

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 温安适 来源 | https://my.osc ...

  9. Spring中应用反射机制浅析

    我们知道,Spring中大量使用了反射机制,那么究竟是什么地方使用了呢?就从源头说起吧. 一  反射源头Class类 对类的概念我们已经非常熟悉了.比如可以有Student这个类,Person这个类. ...

最新文章

  1. DICOM医学图像处理:Dcmtk与fo-dicom保存文件的不同设计模式之“同步VS异步”+“单线程VS多线程”...
  2. 37 个 MySQL 数据库小技巧,不看别后悔!
  3. win7 磁盘根目录(E盘)添加管理员权限
  4. 【渝粤题库】国家开放大学2021春1400机器人技术及应用题目
  5. Python3OS文件/方法
  6. Hibernate 异常org.hibernate.LazyInitializationException: could not initialize proxy - no Session
  7. HandlerInterceptor SpringMVC拦截器
  8. 网络数据采集技术—Java网络爬虫入门与实战 书稿纠错
  9. 软考信息系统项目管理师_体系介绍_证书作用价值_报考条件_考生分析---软考高级之信息系统项目管理师001
  10. 【干货】2021微信生态下的营销洞察.pdf(附下载链接)
  11. JavaScript中的六种错误类型
  12. 对缓存的思考——提高命中率
  13. Selenium 三种等待
  14. Linux误删C基本运行库libc.so.6处理方法
  15. 通过 web 录制视频(摄像头)并上传
  16. 51Nod-1136 欧拉函数
  17. protel DXP2004批量修改
  18. Mac安装软件时提示已损坏的解决方法
  19. SAP ABAP 我的文章合集:ABAP and Excel
  20. 解决chrome浏览器手机调试模式下鼠标指针消失(量化范围设置无效情况)

热门文章

  1. Online Learning算法理论与实践
  2. Linux基础命令---comm
  3. iOS学习笔记19 地图(一)定位CoreLocation
  4. 【ZZ】详解哈希表的查找
  5. buf.readInt32LE函数详解
  6. Shell脚本之IP网络地址和广播地址计算
  7. CCNA学习指南第十一章
  8. Scaleform GFx
  9. ASP.NET 应用程序遭遇Server Application Unavailable问题的解决的方法
  10. linux学习笔记-9.查找