springboot中的事件

【SpringBoot3】Spring Boot Event 自定义事件的发布与监听 Spring Boot自定义事件是Spring框架中事件处理机制的一种扩展,它允许开发者在Spring Boot应用程序中定义、发布和监听自己的事件。这些事件可以用于在应用程序的不同组件之间进行通信,实现解耦和异步处理。通过自定义事件,开发者可以更加灵活地处理业务逻辑,提高系统的可扩展性和可维护性。 阅读详情

官网对springboot事件的描述

springboot中事件的发布顺序(发送优先级从高到底)

  • ApplicationStartingEvent在运行开始时发送 ,但在进行任何处理之前(侦听器和初始化程序的注册除外)发送
  • ApplicationEnvironmentPreparedEvent当被发送Environment到中已知的上下文中使用,但是在创建上下文之前
  • ApplicationContextInitializedEvent在ApplicationContext准备好且已调用ApplicationContextInitializers之后但任何bean定义未加载之前发送
  • ApplicationPreparedEvent在刷新开始之前但在加载bean定义之后发送
  • ApplicationStartedEvent上下文已被刷新后发送,但是任何应用程序和命令行亚军都被调用前
  • ApplicationReadyEvent在所有的命令行应用启动后发送此事件,可以处理请求

    ps:这里的命令行引用主要是指扩展了ApplicationRunner和CommandLineRunner的实现

  • ApplicationFailedEvent如果在启动时异常发送

自定义扩展事件或监听springboot事件方法

前提:需要等待ApplicationContext已经初始化完成才能通过其发送事件

  • 自定义事件
/**
 * @Author xf
 * @Description 事件(消息)
 * @Date 2019/12/6 16:41
 **/
public class MessageEvent extends ApplicationEvent {
    public MessageEvent(Object source) {
        super(source);
    }
}
  • 自定义监听器
    • 实现方式1:通过@EventListener指定需要监听的事件,常用
      /**
       * @Author xf
       * @Description 事件监听
       * @Date 2019/12/6 16:42
       **/
      @Component
      public class MyListener {
          @EventListener(value = MessageEvent.class)
          public void listener(Object object){
              System.out.println("MyListener  = " + object);
          }
      }
      
    • 实现方式2:通过实现EventListener
      /**
       * @Author xf
       * @Description 刷新事件监听
       * @Date 2019/12/6 17:05
       **/
       @Component
      public class RefreshEventListener implements ApplicationListener {
          @Override
          public void onApplicationEvent(ApplicationEvent applicationEvent) {
              if(applicationEvent instanceof MessageEvent){
                  final MessageEvent messageEvent = (MessageEvent) applicationEvent;
                  System.out.println("(RefreshEventListener ) = " + messageEvent);
              }
          }
      }
      
    • 通过spring.factories方法扩展,这个方法不太合适用在这里,可读性不高,与上一个实现方式的区别就是去掉了注解@Component。放在spring.factories内让spring进行初始化.spring在初始化所有扩展spring.factories的内容时一并初始化。这种方式是自定义spring-boot-starter-xxx.jar的时候常用的方法。
      public class SpringFactoriesEventListener implements ApplicationListener {
          @Override
          public void onApplicationEvent(ApplicationEvent applicationEvent) {
              if(applicationEvent instanceof MessageEvent){
                  final MessageEvent messageEvent = (MessageEvent) applicationEvent;
                  System.out.println("(SpringFactoriesEventListener ) = " + messageEvent);
              }
          }
      }
      
      添加META-INF文件夹,并新建spring.factories文件,添加如下内容
      org.springframework.context.ApplicationListener=com.xfc.transactional.transactional.listener.SpringFactoriesEventListener
      

最后看一下运行结果

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.2.1.RELEASE)

2019-12-06 18:12:36.212  INFO 620792 --- [           main] c.x.t.t.TransactionalApplication         : Starting TransactionalApplication on chenxingfei with PID 620792 (D:\personal-workspace\transactional\target\classes started by mintq in D:\personal-workspace\transactional)
2019-12-06 18:12:36.218  INFO 620792 --- [           main] c.x.t.t.TransactionalApplication         : No active profile set, falling back to default profiles: default
2019-12-06 18:12:39.730  INFO 620792 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2019-12-06 18:12:39.759  INFO 620792 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2019-12-06 18:12:39.760  INFO 620792 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.27]
2019-12-06 18:12:39.972  INFO 620792 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2019-12-06 18:12:39.972  INFO 620792 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 3484 ms
2019-12-06 18:12:40.987  INFO 620792 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2019-12-06 18:12:41.748  INFO 620792 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2019-12-06 18:12:41.757  INFO 620792 --- [           main] c.x.t.t.TransactionalApplication         : Started TransactionalApplication in 7.269 seconds (JVM running for 8.432)
(MyListener) = com.xfc.transactional.transactional.event.MessageEvent[source=我发布事件了]
(SpringFactoriesEventListener) = com.xfc.transactional.transactional.event.MessageEvent[source=我发布事件了]
(RefreshEventListener) = com.xfc.transactional.transactional.event.MessageEvent[source=我发布事件了]

欢迎交流哦!!!私信我

Spring Boot中的事件驱动开发 Spring Boot为事件驱动开发提供了便捷的支持,通过ApplicationEvent和ApplicationListener机制,我们可以轻松实现事件的发布和监听。我们可以自定义事件并发布,自定义监听器来处理这些事件。通过本文的介绍,我们了解了Spring Boot中的事件驱动开发,包括自定义事件、发布事件和监听事件的实现方式。在实际开发中,我们可以根据具体需求灵活运用事件驱动开发模式,提升系统的设计质量和开发效率。事件驱动架构的核心思想是将事件的发布者和事件的处理者解耦,通过事件总线来传递事件。 阅读详情

相关推荐

Spring Boot中的事件与JMS消息集成

Spring Boot的事件机制通过ApplicationEvent和监听器实现模块间通信,支持内置生命周期事件(如ContextRefreshedEvent)和自定义事件开发。自定义事件需定义事件类、发布事件(ApplicationEventPublisher)和监听处理(实现ApplicationListener或使用@EventListener注解)。典型应用如用户状态变更时发布UserActivatedEvent事件,异步记录日志。该机制实现业务解耦,提升扩展性,支持同步/异步处理和事务边界控制(@

静水深流 1532

【Springboot知识】springboot基础-事件

在Spring Boot中,事件机制是一种基于观察者模式的设计,它允许在Spring容器内部发布和订阅消息。在Spring Boot中,开发者可以自定义事件和监听器来实现特定的业务逻辑。定义一个继承自的事件类,并在其中封装事件数据。在业务代码中注入对象,并调用方法发布事件。定义一个实现接口的监听器类,或者使用注解标注一个方法作为监听器,并重写方法或标注的方法来处理事件。首先,我们定义一个自定义事件类OrderEvent,它继承自。这个事件类用于封装与订单相关的事件数据。在这个例子中,

wendao76的专栏 2346

SpringBoot 事件发布监听机制使用、分析、注意点 (一篇到位)

事件发布监听机制使用、分析、注意点

默默不代表沉默 1万+

Springboot事件实现

生活中的事件,有触发事件的动作,事件发生了以后有处理事件的机制,事件的类型。接下来应该有一个处理事件的类,springboot中使用ApplicationListener接口来定义处理事件的监听类。首先定义事件,以面向对象的思路来理解,那应该是有接口或者是类来标识具备这样的方法的类就是事件类。发布事件,对外提供事件发布机制,使用ApplicationEventPublisher发布事件。springboot使用ApplicationEvent做为事件类的父类。......

llwhlee的博客 2745

【Spring】Spring Boot 之事件(Event)ApplicationEvent

ApplicationContext 通过 ApplicationEvent 类和 ApplicationListener 接口进行事件处理。如果将实现 ApplicationListener 接口的 bean 注入到上下文中,则每次使用 ApplicationContext 发布 ApplicationEvent 时,都会通知该 bean。本质上,这是标准的观察者设计模式。

九师兄 2065

【Springboot系列】解析Springboot事件机制,从入门到大师

1、是什么 2、内置有哪些事件 3、自定义 3.1 新建一个Springboot web项目 3.2 创建自定义事件,继承ApplicationEvent 3.3 创建监听器Listener,实现ApplicationListener 3.4 发布事件 4、看源码 4.1 注册 4.2 ApplicationEventMulticaster 4.3 触发流程 5 杂项 5.1 Spring Boot事件监听有四种方式 5.2 自定义线程池 5.3 发布事件的方式

我是香菜 1491

【Spring Boot 三】SpringBoot中事件与通知

前言 在SpringBoot启动过程中,有下面两行代码 SpringApplicationRunListeners listeners = getRunListeners(args); listeners.starting(); 简单概括来说,他的作用是: 通过spring.factories文件中找到所有需要被实例化的SpringApplicationRunListener的实现类;并将其实例化,然后执行starting方法; 在SpringBoot中这个实现类只有EventPublishin

石臻说AI(szzdzhp001) 【原名 石臻臻的杂货铺】 3526

jane street market prediction 冠军方案 奇巧淫技与topline链接整理(3/3)

目录前言将income 作为loss(优化目标)读取数据,定义优化目标模型训练与微调提交结果多目标学习Topline整理AE+MLP (rank10)Current 17th solution: Ensembles of deep (49 layer) MLPsmixup augmentation: a way to learn from trades with weight=0 (rank4)My (perhaps) over-complicated LSTM solutionCurrent 62nd .

weixin_51484067的博客 2640

一文读懂SpringBoot中的事件机制

一文读懂SpringBoot中的事件机制?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 要“监听”事件,我们总是可以将“监听器”作为事件源中的另一个方法写入事件,但这将使事件源与监听器的逻辑紧密耦合。 对于实际事件,我们比直接方法调用更灵活。我们可以根据需要动态注册和注销某些事件的侦听器。我们还可以为同一事件设置多个侦听器。 本教程概述了如何发布和侦听自定义事件,并解释了 Spring Boot 的内置事件。 为什么我应该使用事件而不是直接

LoveSummer 6481

AVL-Excite新手必看:5步搞定发动机阀系系统建模(附B站视频教程)

本文为AVL-Excite新手提供发动机阀系系统建模的5步详细指南,涵盖软件环境搭建、基本结构建立、关键参数设置、仿真分析及常见问题排查。通过清晰的步骤说明和实用技巧,帮助工程师快速掌握建模方法,并附有精选B站视频教程链接,便于实践学习。

weixin_29305313的博客 510

camera——HAL层知识分享

CameraHAL层是Android相机系统的核心中间层,负责连接Framework层与硬件驱动层。它通过标准化接口解耦软硬件,实现跨平台兼容性,同时为厂商提供硬件定制空间。主要功能包括:设备管理、数据流处理、参数控制以及图像优化。关键子系统涵盖预览、拍照、录像、对焦与曝光等模块,采用HAL3的"请求-响应"模型实现精细控制。性能优化重点关注启动时间、帧率稳定性和延迟控制。通过分层架构设计(接口层-核心层-适配层)和缓冲池机制,确保高效数据传输和硬件资源调度。

2302_77429403的博客 2078

Spring Boot中的各种事件

spring boot 各种事件贯穿整个启动的生命周期,读懂了这些时间也差不多理解了springboot的启动流程。接口表示springboot程序准备开始启动,这是最早的事件触发方法,它将触发。的方法定义很讲究,方法从上到下的顺序也正好是各事件触发的顺序。定义了spring启动过程中各个事件被触发的顶层方法。接口的唯一具体实现类是。

小伍的程序之路 1029

告别手动打点计时:用Lauterbach TRACE32的RunTime功能,5分钟搞定嵌入式代码段性能分析

本文深入解析了Lauterbach TRACE32的RunTime功能在嵌入式代码性能分析中的革命性应用。通过硬件级计时原理和非侵入式设计,该功能能快速精确测量代码执行时间,显著提升开发效率,特别适用于汽车电子和工业控制领域。文章还提供了从基础设置到高级分析的完整实战指南,帮助工程师轻松掌握这一强大工具。

weixin_30615767的博客 280

Springboot:解析Spring Boot事件机制

Spring Boot的事件机制是基于观察者模式的强大功能组件,在阿里/字节等大厂的高并发系统中扮演着关键角色。

weixin_43290370的博客 1196

从零搭建企业网络:使用Packet Tracer模拟多区域OSPF组网全过程

本文通过Cisco Packet Tracer模拟,详细演示了从零搭建一个典型企业多区域OSPF网络的完整流程。内容涵盖网络拓扑规划、IP地址设计、多区域划分原理,并提供了从设备初始化、接口配置到OSPF多区域核心配置与验证的详细步骤。文章旨在帮助网络学习者与IT支持人员通过动手实验,将理论知识转化为实际的配置与排障能力。

day7的博客 1031

多径衰落信道的 MATLAB 仿真

在无线通信系统中,信号在传输过程中会经历多径传播现象,导致信号在接收端出现时域和频域上的扩展。通过以上示例代码,我们可以进行多径衰落信道的 MATLAB 仿真。同时,我们还可以通过调整信道参数和信号特性,进一步研究多径衰落对系统性能的影响。常用的模型之一是瑞利衰落信道模型,它假设信号在传输过程中受到多个散射路径的影响。除了瑞利衰落信道模型,我们还可以使用其他类型的信道模型,如高斯衰落信道模型。在上述代码中,我们首先定义了信道的参数,包括最大多普勒频移、多径延迟和多径功率衰落。函数来模拟高斯衰落信道。

TechCraze的博客 666

SpringBoot-SpringBoot中的事件机制

微信公众号:glmapper工作室 掘金专栏:glmapper 微 博:疯狂的石头_henu 欢迎关注,一起学习分享技术 在这篇文章中聊一聊 Spring 中的扩展机制(一)中对Spring中的事件机制进行了分析。那么对于 SpringBoot 来说,它在 Spring 的基础上又做了哪些拓展呢?本篇将来聊一聊 SpringBoot 中的事件。 在 SpringBoot 的启...

weixin_34326558的博客 342

将Windbg附加到软件进程上排查异常闪退的问题

使用Windbg和Process Explorer排查因为内存泄漏导致的软件异常闪退问题。

dvlinker的技术专栏 1万+

【SpringBoot】解析Springboot事件机制,事件发布和监听

事件类需要继承 ApplicationEvent 类示例:定义一个报警事件,属性是报警实体类,也可以是其他字段或者实体根据业务自定义import org/*** 定义一个报警事件,属性是报警实体类} }/*** 定义一个报警事件,属性是报警实体类} }/*** 定义一个报警事件,属性是报警实体类*/事件监听类,实现 ApplicationListener 接口,泛型是import com。

No8g攻城狮的博客 2434

杰理AC696N系列芯片外部中断使用教程

本教程详细介绍了杰理AC696N芯片的GPIO引脚中断唤醒功能实现方法。主要内容包括: 功能特点: 支持任意GPIO引脚配置为中断源 可灵活选择上升沿或下降沿触发 提供自定义中断回调函数接口 核心实现: 通过port_wkup_interrupt_init()函数配置GPIO属性 使用request_irq()注册中断服务程序 提供中断使能/关闭接口 注意事项: 此功能在低功耗模式下无效 需注意引脚冲突和中断优先级设置 建议在回调函数中实现简洁的逻辑 应用场景: 按键检测 外部信号监测 事件触发等 本方案提

qq_42014563的博客 944

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

SpringBoot中的事件机制

文章内容 在这篇文章中聊一聊 Spring 中的扩展机制(一)中对Spring中的事件机制进行了分析。那么对于 SpringBoot 来说,它在 Spring 的基础上又做了哪些拓展呢?本篇将来聊一聊 SpringBoot 中的事件。 在 SpringBoot 的启动过程中,会通过 SPI 机制去加载 spring.factories 下面的一些类,这里面就包括了事件相关的类。 SpringApp...

gt9000的博客 5283

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Spring及Springboot事件机制详解

Spring提供了强大的扩展体系,其中本篇介绍的事件机制是其扩展体系中一个主要分支。本篇先介绍Spring事件机制原理,再总结下spring和spring boot启动过程的主要事件,接着通过示例展示了自定义监听器的4种主要的注册方式,最后通过示例介绍了自定义事件的发布方式。

chyohn的博客 1722

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

springboot中的事件监听

详解springboot中的事件监听定义事件定义监听器实现接口方式注解方式spring.factories方式springboot启动过程中的监听器原理下面是初始化监听器的流程代码启动,从run方法进去从run方法进去从构造方法进去初始化逻辑getSpringFactoriesInstances方法loadFactoryNames方法从spring.factories取出所有信息下面是事件发布的流程run方法进去处理逻辑事件发布,starting方法jdk1.8新特性解读multicastEvent 事件广

weixin_43196116的博客 822

Springboot中的事件Event

事件Event作为一种常用的线程通讯工具,在Springboot中可以方便地提供开发者进行线程交互。 1.事件定义 1 import org.springframework.context.ApplicationEvent; 2 3 /** 4 * WebSocket触发事件定义 5 * @author : Asp1rant 6 * @date : 19-...

weixin_34408624的博客 313

Spring Boot事件

Spring Boot和Spring 事件的触发发生在SpringApplication运行阶段,围绕run(String...)方法不同阶段触发。run(String...)结合SpringApplication初始化阶段完成的相关状态,进一步完善了运行时所需要准备的资源,随后启动Spring应用上下文,在此期间就会伴随Spring Boot和Spring 事件的触发

weixin_44397870的博客 1061
上一篇: 一道不寻常的面试题
下一篇: 享元模式
程序员行一
博客等级 码龄12年 32粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值