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

【笔记】2022.6.7 数据分析概论

已完结

SpriteNym的博客 1373

一文读懂SpringBoot中的事件机制

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

LoveSummer 6479

保姆级教程:用DaVinci Configurator & Developer从零搭建AUTOSAR OS(TC2xx三核实战)

本文提供了一份详细的AUTOSAR OS配置指南,使用DaVinci Configurator和Developer工具从零开始搭建Infineon TC2xx三核系统。涵盖多核配置协同逻辑、版本兼容性陷阱及验证错误的解决方案,帮助开发者在3小时内构建可运行的多核OS框架。

weixin_33940469的博客 315

SIwave学习记录:电热耦合仿真

SIwave电热耦合仿真

m0_68174736的博客 2336

Spring Boot中的各种事件

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

小伍的程序之路 1029

SPEI计算避坑指南:gma中Distribution和FitMethod参数怎么选?

本文深入探讨了在SPEI计算中如何科学选择gma库中的Distribution和FitMethod参数,帮助研究者避开常见陷阱。详细分析了LogLogistic、Gamma和Pearson3三种分布的适用场景,以及LMoment与MLE拟合方法的优缺点,为气象干旱研究提供实用指南。

weixin_30308101的博客 250

Springboot:解析Spring Boot事件机制

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

weixin_43290370的博客 1196

Optisystem软件与Matlab软件的联合数据读取

目录 Matlab软件程序编写 Optisystem软件的连接与设置 数据读取结果 Matlab软件程序编写 利用Matlab软件按照下图编写程序,保存为getdata.m文件。 OutputPort1 =InputPort1; fileID=fopen('OSAdata.txt','wt'); fprintf(fileID,'%f\n',OutputPort1.Sampled.Signal); fclose(fileID); Optisystem软件的连接与设置 (以基于线性插值法

Vivian_Chen_的博客 4855

STM32+OV7670实战:5步搞定低成本人脸识别门禁系统(附完整代码)

本文详细介绍了基于STM32单片机和OV7670摄像头构建低成本离线人脸识别门禁系统的完整实战方案。文章从硬件选型、电路设计避坑入手,逐步讲解了图像采集优化、轻量级人脸检测与LBP特征提取策略,并提供了离线人脸库管理、特征比对以及系统集成的具体实现方法,附有核心代码示例,旨在帮助开发者快速实现可落地的嵌入式视觉应用。

kubernetes8ctl的博客 568

SpringBoot-SpringBoot中的事件机制

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

weixin_34326558的博客 342

Delta并联机械手-Codesys实现以及正解逆解研究

由于Codesys的Robotics模块有Delta并联机械手的运动模型,因此借助Codesys的机械手运动模型,研究自己的正解逆解算法。

weixin_42386991的博客 5567

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

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

No8g攻城狮的博客 2434

康耐视visionpro-CogCreateSegmentAvgSegsTool操作工具详细说明

康耐视visionpro-CogCreateSegmentAvgSegsTool操作工具详细说明

视觉人机器视觉的博客 1480

数学建模模型总结

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

SpringBoot中的事件机制

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

gt9000的博客 5283

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Spring及Springboot事件机制详解

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

chyohn的博客 1722

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

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

余额充值