【转】SpringBoot事件发布的四种方式

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

今天学习了一下SpringBoot的事件发布机制,在此记录下。

SpringBoot进行事件监听有四种方式:
1.手工向ApplicationContext中添加监听器
2.将监听器装载入spring容器
3.在application.properties中配置监听器
4.通过@EventListener注解实现事件监听

讲到事件监听,这里我们说下自定义事件和自定义监听器类的实现方式:
自定义事件:继承自ApplicationEvent抽象类,然后定义自己的构造器
自定义监听:实现ApplicationListener接口,然后实现onApplicationEvent方法。

首先创建消息事件:

import org.springframework.context.ApplicationEvent;

public class MyEvent extends ApplicationEvent {

    public MyEvent(Object source) {
        super(source);
    }
}

这里创建了一个最简单的消息事件,默认使用source传递消息。

下面讲下4种事件监听的具体实现。

方式1. 创建消息监听器类实现ApplicationListener。

import org.springframework.context.ApplicationListener;

public class MyEventListener1 implements ApplicationListener<MyEvent> {
    @Override
    public void onApplicationEvent(MyEvent myEvent) {
        Object msg = myEvent.getSource();
        System.out.println("自定义事件监听器(MyEventListener1)收到发布的消息: " + msg);
    }
}

然后在启动类中去加载我们的事件监听器:

import com.xqnode.learning.common.event.MyEvent;
import com.xqnode.learning.common.event.MyEventListener1;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class LearningApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(LearningApplication.class, args);
        context.addApplicationListener(new MyEventListener1());
    }
}

方式2. 将事件监听器装载到spring的bean中:

@Component
public class MyEventListener2 implements ApplicationListener<MyEvent> {
    @Override
    public void onApplicationEvent(MyEvent myEvent) {
        Object msg = myEvent.getSource();
        System.out.println("自定义事件监听器(MyEventListener2)收到发布的消息: " + msg);
    }
}

方式3. 通过配置文件指定事件监听器的位置。先创建监听器:

public class MyEventListener3 implements ApplicationListener<MyEvent> {
    @Override
    public void onApplicationEvent(MyEvent myEvent) {
        Object msg = myEvent.getSource();
        System.out.println("自定义事件监听器(MyEventListener3)收到发布的消息: " + msg);
    }
}

然后在application.yml中指定其位置:

context:
  listener:
    classes: com.xqnode.learning.common.event.MyEventListener3

你可能会发现yml会报警告,找不到context.listener.classes这个配置项,其实这个配置是存在的,直接忽略它的警告就好。

方式4. 通过 @EventListener来配置事件监听器:

import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;

@Component
public class MyEventListener4 {
    @EventListener
    public void listener(MyEvent myEvent) {
        Object msg = myEvent.getSource();
        System.out.println("自定义事件监听器(MyEventListener4)收到发布的消息: " + msg);
    }
}

好了,至此我们完成了4中消息监听器的配置,下面还差最后一步,需要在启动类中发布消息:

import com.xqnode.learning.common.event.MyEvent;
import com.xqnode.learning.common.event.MyEventListener1;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class LearningApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(LearningApplication.class, args);
        context.addApplicationListener(new MyEventListener1());
        context.publishEvent(new MyEvent("测试事件"));
    }
}

测试验证:
直接启动我们的工程,就可以看到结果。
event
由此我们可以看到,消息的监听是有顺序的。


原文转自:
https://blog.youkuaiyun.com/ignorewho/article/details/80702827

SpringBoot ApplicationEvent:事件发布与监听机制 *** 用户注册事件* 在用户注册成功后发布,用于执行后续操作*/// 用户ID// 用户名/*** 构造函数* @param source 事件源(发布事件的对象)* @param userId 注册用户ID* @param username 注册用户名*/这个例子定义了一个用户注册事件,它在用户注册成功后被发布,携带了用户ID和用户名信息,可以被其他组件监听并作出响应。 阅读详情

相关推荐

【SpringBoot】69、SpringBoot中Event事件发布与监听

事件的发布监听机制类似于观察者模式,利用事件的监听机制可以实现业务的发起与业务的处理解耦,更能体现单一职责原则,例如:新用户注册,我们需要发送邮件通知用户,触发了注册事件,监听者就能监听到注册事件,进行后续操作...

JACKAL 20万+

(五)springboot实战——springboot自定义事件的发布和订阅

本节内容我们主要介绍一下springboot自定义事件的发布与订阅功能,一些特定应用场景下使用自定义事件发布功能,能大大降低我们代码的耦合性,使得我们应用程序的扩展更加方便。就本身而言,springboot的事件机制是通过观察者设计模式实现。通过ApplicationListener事件监听器实现事件的发布与订阅。我们以登录场景为例,假如用户登录之后,需要发送登录通知、发送邮件通知、发送签到通知,如果按照常规做法,我们可以顺序执行以上操作,但是使用springboot的事件机制,我们可以发布一个登录的事件消

厉害哥哥的博客 2381

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

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

默默不代表沉默 1万+

SpringBoot - 事件机制使用详解(ApplicationEvent、ApplicationListener)

Spring 事件机制使用观察者模式来传递事件和消息。我们可以使用 ApplicationEvent 类来发布事件,然后使用 ApplicationListener 接口来监听事件。当事件发生时,所有注册的 ApplicationListener 都会得到通知。事件用于在松散耦合的组件之间交换信息。由于发布者和订阅者之间没有直接耦合,因此可以在不影响发布者的情况下修改订阅者,反之亦然。下面通过样例样式事件机制的使用。

航行博客 3835

基于 openEuler 24.03 LTS 源码编译安装 Zabbix 7.4

Zabbix是一款开源的企业级分布式监控系统,支持网络、服务器、应用等多种IT资源的监控。核心功能包括数据采集、告警通知、可视化展示等,采用Server/Agent架构,支持多种操作系统。本文详细介绍了在openEuler 24.03系统上部署Zabbix 7.4.2的完整流程,包括环境准备、MySQL配置、PHP/Apache安装、Zabbix编译安装等步骤,为构建企业级监控系统提供了实践指导。

广然笔记 1188

树莓派使用 OLED 屏显示图片及文字

树莓派默认是不带显示屏的,如果想要查看系统的一些信息,需要使用电脑登录到树莓派,或者通过 HDMI 连接外接显示器查看。这样做总是有点麻烦,我们可以通过外接一个 OLED 屏来显示一些关键参数或者图片。本文将详细介绍操作方法。 OLED 模组介绍 OLED 屏主要有两种:128×32 和 128×64 ,主要颜色是白、黄、蓝。OLED 屏的特点是功耗低,价格便宜,使用 I2C 接口与主机连接。本文所使用的是 128×64 尺寸的屏幕,外形如下: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直

码到成功 3742

SpringBoot整合MyBatis四种常用的分页方式

扩展:PageHelper.startPage(int PageNum,int PageSize):用来设置页面的位置和展示的数据条目数,我们设置每页展示5条数据。PageInfo用来封装页面信息,返回给前台界面。PageInfo中的一些我们需要用到的参数如下表:

目前专注区块链相关技术的学习与分享 3717

ANSYS workbench (关于normal stiffness factor接触刚度因子)

关于normal stiffness factor接触刚度因子的含义和设置方法

weixin_43730845的博客 6799

【springboot 事件发布机制源码浅析】

事件发布机制在Spring Boot框架中扮演着重要的角色,它是实现模块解耦、扩展和定制以及自动化配置的关键机制之一。通过事件发布机制,开发者可以实现高度可扩展和可定制的应用程序,并更好地利用Spring Boot框架的各种特性和功能。文章主要包含两个部分,一个是如何使用springboot的事件发布,另一个就是分析其运行原理。事件发布机制也是使用了观察者模式来实现的,如果你没了解过观察者模式建议先了解一下观察者模式自定义实现类,实现ApplicationEvent类/*** 获取事件属性。

weixin_39439156的博客 1206

从摄像头选型到PCB布线:搞懂MIPI CSI带宽计算,避免你的嵌入式项目翻车

本文详细解析了MIPI CSI带宽计算在嵌入式项目中的关键作用,从摄像头选型到PCB布线提供全流程指导。通过实际案例和计算公式,帮助工程师准确计算带宽需求,避免图像丢帧和系统崩溃问题,同时优化PCB设计确保信号完整性。

weixin_30533109的博客 375

麒麟和UOS系统编写桌面点击可执行文件

在桌面上创建一个快捷方式(.desktop 文件)来运行脚本。打开文本编辑器,创建一个新文件,如。这可以通过文本编辑器来完成。首先,确保您的脚本具有执行权限。现在,您应该可以双击桌面上的。保存此文件到桌面目录,例如,在桌面上创建一个快捷方式(文件来运行您的脚本了。使用图形界面或命令行给。现在您可以双击桌面上的。为您脚本的实际路径。是您脚本的实际路径。文件来运行您的脚本了。

u013934107的博客 7246

Springboot项目四种启动方式——SpringBoot学习

  启动一个SpringBoot项目有四种方式,其中三种是借助 SpringBoot 的内置Tomcat 容器,一种是借助外部 Tomcat(SpringBoot使用的是Tomcat容器)。接下来我们将简单的使用一下每一种方式。 我们的项目还是使用上次的Hello Springboot项目,目录结构如下: 1. 启动方式一   在App.java 文件中编写: package com; imp...

写Bug的小白的博客 1万+

机器学习【学校智慧食堂及其应用】

本文主要介绍机器学习【智慧食堂及其应用】

qq_201729558 2570

SpringBoot事件监听器的四种方式

Java事件监听 事件监听的概念: 事件监听就是让电脑通过你的操作得到一些数据并对这些数据做出反应,反馈相应的行为或者指令的操作。 java中的事件机制的参与者有3种角色; event object:事件状态对象,继承自java.util.EventObject,作为数用于listener的相应的方法之中。伴随事件的发生,相应的状态通常都封装在事件状态象中。 event source:具体的事件源,比如说,你点击个button,那么button就是event source,要想使button对某些事件进行

qq_45429856的博客 3766

Paraview:Python Calculator Filter

python calculator过滤器 from paraview.simple import * connection = servermanager.Connect('localhost',11111) er = servermanager.sources.EnSightreader(CaseFileName='/.../data.case') er.PointArrays = ['x_velocity','1','y_velocity','1','z_velocity','1','cp','1']

haimianjie2012的专栏 3495

如何利用Arcgis进行地统计学分析(三):空间插值方法选择与优化

本文深入探讨了在Arcgis中进行地统计学分析时,如何根据探索性数据分析(EDA)结果科学选择与优化空间插值方法。文章对比了IDW、RBF、克里金等主流方法的适用场景与核心参数,并通过实战案例详解了从数据诊断到模型调优的完整流程,强调结合半变异函数与趋势分析进行“对症下药”,以提升插值结果的精度与可靠性。

weixin_29281915的博客 120

springboot进行事件监听有四种方式

springboot进行事件监听有四种方式: 1.手工向ApplicationContext中添加监听器 2.将监听器装载入spring容器 3.在application.properties中配置监听器 4.通过@EventListener注解实现事件监听 讲到事件监听,这里我们说下自定义事件和自定义监听器类的实现方式: 自定义事件:继承自ApplicationEvent抽象类,然后定义自己的构...

qianxiaopeng的专栏 2453

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

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

创建SpringBoot项目四种方式

创建SpringBoot项目四种方式

s17856147699的博客 6739

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

springboot属性注入的四种方式

10.springboot属性注入 10.1通过以前spring中配置 java配置主要靠java类和一些注解来达到和xml配置一样的效果,比较常用的注解有: @Configuration:声明一个类作为配置类,代替xml文件 @Bean:声明在方法上,将方法的返回值加入Bean容器,代替<bean>标签 @Value:属性注入 @PropertySource:指定外部属性...

Ru_yin_hai的博客 3万+

老版QQ原生表情gif动态

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

springboot的四种属性注入的方式

springboot属性注入的四种方式 这篇文章主要和大家分享下springboot的四种属性注入方式,需要先掌握一些的springboot相关的知识。 第一种:通过@autowired进行注入 本次以数据库连接所需的属性为例进行分析,具体的步骤如下: 需要有springboot启动类和简单的controller层的文件,用于测试,在下面的截图中可以看到controller层简单的代码。 定义一个资源配置文件,在springboot中,只有一个资源配置文件,也就是:application.properti

怀恋的愤怒的博客 2318

四种高效搭建SpringBoot项目的方式详解

SpringBoot作为当前Java领域最流行的微服务框架,以其"约定优于配置"的理念和快速开发特性深受开发者喜爱。本文将详细介绍四种搭建SpringBoot项目的方式,帮助初学者快速上手,同时也为有经验的开发者提供更多选择方案。掌握多种SpringBoot项目创建方式能让你在不同场景下灵活选择最合适的方法。对于新手,建议从前两种方式开始;对于有经验的开发者,理解第四种方式有助于深入掌握SpringBoot的运作机制。无论哪种方式,SpringBoot都能帮助你快速构建健壮的Java应用。

m0_62910542的博客 1409

springboot集成websocket的四种方式小结

本文主要介绍了springboot集成websocket的四种方式小结,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

spring cloud 微服务技术开发 4988

SpringBoot 集成 mybatis的四种方式

关于springBoot集成mybatis的方式,其实有很多,网上也有很多的案例,经过一系列参考和实践,大致有以下几种方式。 方式一 (使用注解形式,全程无MyBatis与Spring的配置文件) 1、添加依赖 <!-- mybatis --> <dependency> <groupId>org.mybatis.spring.boot</group...

真的愿意去努力,人生最坏的结果,也不过是大器晚成。 3054

SpringBoot整合发送邮件的四种方式

邮件发送是一个非常非常常见的功能,注册时的身份认证、 重要通知发送等都会用到邮件发送。Sun公司提供了JavaMail用来实现邮件发送,但是配置烦琐。Spring 中提供了JavaMailSender用来简化邮件配置。Spring Boot 则提供了 MailSenderAutoConfiguration 对邮件的发送做了进一步简化现在我们就来学习在Spring Boot中如何发送邮件。 本文将介绍四种类型邮件的发送方式:简单文本邮件、带附件邮件、邮件正文带图片、使用Themeleaf构...

8633

springboot设置Cors跨域的四种方式

前言:CorsFilter / WebMvcConfigurer / @CrossOrigin 需要SpringMVC 4.2 以上的版本才支持,对应SpringBoot 1.3 版本以上都支持这些CORS特性。不过,使用SpringMVC4.2 以下版本的小伙伴也不用慌,直接使用方式4通过手工添加响应头来授权CORS跨域访问也是可以的。 首先一点:跨域问题,后端解决,有如下四种方式。 方...

Mint6的博客 1万+
上一篇: SpringBoot获取Bean
下一篇: Java切割音频文件
程序员青戈
程序员青戈 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄10年 3万+粉丝 250原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值