【Spring注解】事件监听:ApplicationListener和@EventListener注解

本文详细介绍了Spring框架中事件监听的两种方式:实现ApplicationListener接口和使用@EventListener注解。通过示例展示了如何创建监听器、发布事件,并深入探讨了Spring事件驱动的流程和源码分析,包括事件管理器ApplicationEventMulticaster的工作原理,以及如何自定义事件管理器配置线程池来异步处理事件。
摘要由CSDN通过智能技术生成


SpringBoot的事件监听就用的是Spring的 没有变化

Spring的两种监听器

监听器的实现有两种方式:

  • 实现ApplicationListener接口
  • 加@EventListener

ApplicationListener用法

ApplicationListener通过监听容器中发布的一些事件,事件发生就会触发监听器的回调,就完成了事件驱动开发

写一个监听器

  • 写一个监听器监听某个事件
    • 实现ApplicationListener
    • 把监听器加入到容器中

只要容器中有相关事件发布,我们就能监听到这个事件
在这里插入图片描述
测试结果:
监听到的两个事件
在这里插入图片描述

发布事件

我们也可以自己发布事件
我们可以把事件理解为一个对象,它存储了当前发生的事情的过程。
事件的创建:

  • 直接new 一个ApplicationEvent
  • 写一个类继承ApplicationEvent
        // 发布事件
        applicationContext.publishEvent(new ApplicationEvent(new String("我发布的事件")) {
   
        });

在这里插入图片描述

@EventListener用法

在想监听事件的方法上加上@EventListener注解,注解中指定要监听哪种类型的事件
然后在方法上写上参数,获得监听到的事件
在这里插入图片描述
看结果和实现ApplicationListener接口的结果是一样的
在这里插入图片描述

事件驱动的流程

事件管理器要做的事:

  • 得到所有的监听器
  • 在有事件发布时,遍历监听器 判断哪个监听器对当前事件感兴趣即泛型匹配,就调用那个监听器

Spring源码分析监听器原理

创建ioc容器,调用refresh()方法

  • 第一步:多播器/派发器
    创建一个默认的事件管理器:SimpleApplicationEventMulticaster
    this.initApplicationEventMulticaster();
    
  • 第二步:注册监听器
    由于Spring提供了两种监听器,因此refresh()的时候有两个地方拿监听器
    • 实现了ApplicationListener接口的
      从容器中拿到所有的监听器,将他们都注册到事件管理器中
      this.registerListeners(
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值