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) 【原名 石臻臻的杂货铺】 3525

TLSR8258蓝牙Mesh实战:从SDK下载到自定义通信指令全流程(附避坑指南)

本文详细介绍了TLSR8258蓝牙Mesh开发的完整流程,从SDK下载、环境搭建到自定义通信指令的实现。通过实战案例和避坑指南,帮助开发者快速掌握低功耗蓝牙Mesh网络构建技巧,适用于智能家居、工业监控等物联网场景。

weixin_29176179的博客 200

一文读懂SpringBoot中的事件机制

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

LoveSummer 6479

麦当劳app之sign逆向分析

摘要:本文分析了麦当劳APP请求参数sign的逆向过程。通过抓包发现32位sign参数疑似MD5加密,使用frida-trace工具跟踪CC_MD5函数验证其为标准MD5算法。加密参数包含时间戳、token、版本号等固定和动态字段,拼接后经MD5加密生成sign。文章提供了JS和Python两种实现方案,包含完整的请求头参数和加密逻辑,最终成功获取API响应数据。该研究仅用于逆向技术学习,展示了移动应用常见加密参数的逆向分析方法。

佛系更新... 2442

UNext:基于 MLP 的快速医学图像分割网络

有代码,可深入学习轻量级分割模型的论文切入点 UNet 及其最新扩展(如 TransUNet)近年来一直是领先的医学图像分割方法。然而,这些网络无法有效地用于应用中的快速图像分割,因为它们参数繁重、计算复杂且使用缓慢。为此,我们提出了 UNeXt,它是一种基于卷积多层感知器(MLP)的图像分割网络。我们以有效的方式设计了 UNeXt,其中包括早期卷积阶段和潜在阶段的 MLP 阶段。我们提出了一个标记化的 MLP 块,我们可以在其中有效地标记和投影卷积特征,并使用 MLP 来对表示进行建模。

Philo的博客 3942

Spring Boot中的各种事件

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

小伍的程序之路 1029

让 ABAP 复杂内表优雅“喂饱”:Complex Internal Table Filling 全面实战指南

本文为ABAP开发者系统梳理了复杂内表的填充与复制方法。重点介绍了work area的两种声明方式、APPEND操作的多形态用法及其初始值语义,以及VALUE #( )构造器的逐行与整表写法。同时讲解了CORRESPONDING的同名字段映射功能,帮助开发者在"航司与航线"等复杂业务场景中实现最佳实践。文章还涵盖内存优化、可读性建议和常见误区,提供可运行样例,适用于ABAP On-Premise和SAP BTP环境。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 169

Springboot:解析Spring Boot事件机制

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

weixin_43290370的博客 1196

基于Simulink的四足机器人关节力矩优化仿真建模示例

高自由度:每个腿至少有3个自由度(DOF),增加了控制的复杂性。非线性动力学:涉及多体系统的相互作用,包括接触力、摩擦力等。能量消耗:减少不必要的能量消耗是提升续航能力和效率的关键。可以是最小化能量消耗或最大化稳定性等。matlab深色版本% 示例代码通过本指南,我们介绍了如何基于Simulink搭建一个四足机器人的关节力矩优化模型,并进行了仿真以验证其基本功能。

amy_mhd的博客 171

05、CAN 总线拓扑结构详解,线型拓扑搭建要点

CAN总线拓扑与信号完整性优化 本文通过工程实践经验,深入剖析了CAN总线系统中信号完整性的关键要素。主要内容包括: 终端电阻的核心作用:必须严格在总线两端配置120Ω电阻,形成60Ω等效阻抗以匹配双绞线特性阻抗,避免信号反射导致的波形畸变。 阻抗匹配原理:解释了信号能量管理机制,指出阻抗不连续会导致信号反射,并通过示波器波形特征(如振铃现象)判断阻抗失配问题。 信号完整性多维要求:强调信号质量不仅涉及波形存在与否,还包括边沿斜率、共模电压范围等关键参数,这些直接影响通信可靠性。 工程实践建议:提供了终端电

2401_88858637的博客 178

SpringBoot-SpringBoot中的事件机制

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

weixin_34326558的博客 342

基于STM32L4XX、HAL库的ICM-42607-P姿态传感器驱动程序设计

/ 转换为dps(±1000dps量程)float accel_x = sensor_data.accel_x * (8.0f / 32768.0f);// 转换为g值(±8g量程)#define ICM42607_I2C_ADDR 0x68 << 1 // I2C地址(SA0=0)= 0x40) { // ICM-42607的WHO_AM_I值为0x40。// 读取传感器数据。

zhusl6688的博客 835

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

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

No8g攻城狮的博客 2434

uniapp - 使用web-view加载本地网页vue页面,用webview导入本地网页,uniAPP中使用web-view加载的本地及远程vue页面+双向通讯功能(兼容微信小程序、安卓苹果APP)

uniapp的App端web-view加载本地html,uniapp微信小程序webview加载本地HTML文件,在uniAPP中使用web-view加载的本地及远程vue页面且进行双向通讯,uni-app的web-view组件,支持加载远程网页,在app环境下,还支持加载本地HTML页面。uniapp WebView组件实现本地网页加载与通讯传值,uniAPP如何内嵌webView引入本地的vue网页示例代码,uniapp在web-view加载的本地及远程HTML中调用uni的API及网页和vue页面跳转

🏆 前端领域优质创作者 5226

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

SpringBoot中的事件机制

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

gt9000的博客 5283

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Spring及Springboot事件机制详解

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

chyohn的博客 1722

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

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、付费专栏及课程。

余额充值