@EventListener工作原理

Spring注解 @EventListener 的介绍与使用示例以及异常处理 将一个方法标记为监听器,用于监听应用程序事件,事件可以是 ApplicationEvent实例,也可以是其他任意的对象。 阅读详情

@EventListener 是 Spring Framework 提供的用于处理事件监听的注解。它的工作原理基于观察者设计模式,其中有一个事件发布者(publisher)和一个或多个事件监听者(listener)。

事件发布者(Event Publisher)

当某个事件发生时,Spring 应用内的某个组件(通常是服务、控制器、或其他组件)会触发一个事件。

事件发布者并不直接调用事件监听者的方法,而是将事件封装成一个事件对象,并将该事件对象发布到 Spring 应用上下文。

事件发布者通常不关心哪些监听者在监听事件,只需将事件发布出去即可。

事件监听者(Event Listener)

通过 @EventListener 注解,开发者可以在任何 Spring 管理的 Bean 方法上标注监听事件的方法。

当一个带有 @EventListener 注解的方法的参数类型与发布的事件类型匹配时,Spring 将自动调用该方法,将事件传递给它。

方法可以定义多个参数,每个参数表示一个事件类型,如果发布的事件类型匹配任一参数类型,方法就会被调用。

事件处理顺序:

默认情况下,Spring 会按照监听方法的注册顺序调用它们。

如果需要更加精细的控制,可以使用 @Order 注解来指定监听方法的执行顺序。

异步处理

@EventListener 方法可以使用 @Async 注解,实现异步处理。这样,当事件触发时,监听方法将在独立的线程中执行,不会阻塞主线程。

需要在主程序类上添加 @EnableAsync 注解启用 Spring 的异步处理。

Demo

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

@Component
public class MyEventListener {

    @EventListener
    public void handleEvent(MyEvent event) {
        // 处理 MyEvent 事件
        System.out.println("Event handled: " + event.getMessage());
    }
}

public class MyEvent extends ApplicationEvent {

    private String message;

    public MyEvent(Object source, String message) {
        super(source);
        this.message = message;
    }

    public String getMessage() {
        return message;
    }
}

MyEvent 是自定义的事件对象,MyEventListener 中的 handleEvent 方法使用 @EventListener 注解监听 MyEvent 事件。当 MyEvent 事件被发布时,handleEvent 方法将会被自动调用,执行事件处理逻辑。

Spring事件监听器之@EventListener原理 简介 @EventListener是一种事件驱动编程在spring4.2的时候开始有的,早期可以实现ApplicationListener接口, 想了解下ApplicationListener的可以参考下这篇文章https://blog.youkuaiyun.com/baidu_19473529/article/details/86683365Spring为我们提供的一个事件监听、订阅的实现,内部实现原理是观察者设计模式;为的就是业务系统逻辑的解耦,提高可扩展性以及可维护性。事件发布者并不需要考虑谁去监听,监听具体的实 阅读详情

相关推荐

【Spring】聊聊@EventListener注解原理

【Spring】聊聊@EventListener注解原理

芝兰生于深谷,不以无人而不芳 1043

@EventListener注解使用及源码解析

一、简介 @EventListener是一种事件驱动编程在spring4.2的时候开始有的,早期可以实现ApplicationListener接口, 想了解下ApplicationListener的可以参考下这篇文章https://blog.youkuaiyun.com/baidu_19473529/article/details/86683365Spring为我们提供的一个事件监听、订阅的实现,内部实现原...

愤怒的苹果ext的博客 4万+

WinInet 编程:MFC 中的互联网编程

WinInet 是一套 Windows API(应用程序编程接口),用于实现互联网应用程序的网络通信和数据传输。WinInet 抽象了底层网络协议和硬件细节,为程序员提供了一套统一的接口,简化了互联网应用程序的开发过程。WinInet 广泛应用于各种 Windows 应用程序中,包括网页浏览器、下载管理器、网络游戏等。MFC WinInet 是一套强大的类库,为 MFC 程序员提供了在 Windows 平台上实现互联网通信和数据传输的工具。

JAZJD的博客 1636

java 实现事件监听EventListener的方式详解及分析

我们开发中经常遇到监听事件,首先我们先来了解下事件相关知识:使用场景(场景一):银行操作转账成功后需要给客户发送短信和邮件,使用事件就可以实现解耦并异步。我们监听事件之前要有事件源source,创建事件源(Event),发布事件(publishEvent),然后才能到监听事件。事件驱动机制是观察者模式(称发布订阅)具体实现,事件对象(Event)相当于被观察对象(Subject), 事件监听(EventListener) 相当于观察者(Observer)......

m0_57640408的博客 1万+

TSMC65nm工艺下Virtuoso仿真gm-id曲线的保姆级教程(含ADE设置详解)

本文提供了一份在TSMC 65nm工艺下使用Cadence Virtuoso绘制gm-id曲线的详细教程。内容涵盖从理解gm/id方法学、搭建仿真环境、深度解析ADE设置,到运行DC仿真、提取数据并生成对数坐标曲线的完整流程。教程重点解析了Virtuoso ADE中的关键设置与常见避坑点,旨在帮助模拟集成电路设计初学者快速掌握这一核心设计工具,为高性能电路设计奠定基础。

grpc6streamer的博客 1171

python多线程实现http代理

python多线程实现http代理文章要求1.py socket模块2.py threading模块3.环境搭建3.1设置代理3.2搭建http简单服务器代码分析1.完整代码2.逻辑结构 文章要求 1.py socket模块 socket模块接触后很简单,我实现的是阻塞性的套接字。 需要了解到,连接套接字,监听套接字,和套接字accept()方法的返回值是元组 数据传递过程sock.recv(1024),sock.send()也不需要转换编码,直接以b"二进制流"传输 2.py threading模块 th

qq_43402663的博客 2508

Spring注解驱动开发第40讲——你晓得@EventListener这个注解的原理吗?

写在前面 在上一讲中,我们讲了一下事件监听机制的内部原理,当然了,在一过程中,我们也看到了事件的整个发布流程。再回顾一下的话,你会发现之前咱们编写的监听器都是来实现ApplicationListener这个接口的,其实,除此之外,还有另外一种方式。因此,这一讲,我们就来着重讲述这种方式。 这里我先提一下这种方式,即使用@EventListener注解,我们就可以让任意方法都能监听事件。这样的话,我们在一个普通的业务逻辑组件中,就可以直接来使用这个注解了,而不是让它去实现ApplicationListener

李阿昀的博客 2567

REALTEK PKE8710ECF开发板入手试玩(一)

REALTEK PKE8710ECF开发板入手试玩

lbqhope的专栏 690

springboot listeners 事件监听机制 @EventListener详解

本人博客原地址:springboot listeners 事件监听机制 @EventListener详解 创作时间: 2019.06.11 16:53:43 基于springboot2.1.4 springboot在刚启动的时候构造SpringApplication对象就会加载一系列已配置的listeners(详细介绍),此处的listeners实现的是org.springframework.context.ApplicationListener接口,准确来说是org.springframework.con

qq_22351805的博客 5708

Visio中高效绘制空间坐标系的实用技巧

本文详细介绍了在Visio中从零开始高效绘制精准空间坐标系的实用技巧。文章摒弃了现成形状的局限,重点讲解了如何利用直线、箭头和文本框等基础工具,结合网格设置、绘图比例调整和图层管理,构建完全可控的三维坐标系。通过分步指南,帮助用户掌握刻度添加、标注对齐及模板创建等高级方法,从而在科研绘图与工程制图中实现专业级的视觉效果。

e3f4g5的博客 557

解决pd.read_json报错ValueError: Trailing data问题

首先,我们使用open函数打开JSON文件,然后使用json.load函数将JSON文件数据解码为Python对象。在使用Python进行数据处理中,我们经常需要将JSON格式的数据读入到DataFrame中进行处理。而使用pandas库的read_json函数,就可以方便地将JSON数据读入到DataFrame中。但是有时候在读取JSON数据时,会遇到一个非常常见的错误:ValueError: Trailing data。这个错误的解决方案并不难,只需要在read_json中添加一个参数即可。

学习使你进步。 2234

Spring笔记(8) - @EventListener注解探究

  在上文中讲了Spring的事件监听机制,流程是:定义事件、监听器,发布事件,控制台输出监听到的事件内容。   在上文的扩展中 使用 @EventListener 注解来自定义监听器,监听指定的事件,比如下面的案例: @Component public class UserManagerListener { //ApplicationEvent能监听到所有的事件,如果为EmailEvent.class则只能监听到关于邮件的事件 //EventListener有两个参数(可以不写,直接

欢迎点赞 + 关注,开源项目见下方栏目 1万+

Cesium功能集(十二):Cesium中流体仿真

【代码】Cesium功能集(十二):Cesium中流体仿真。

GIS肆月 600

spring事件发布和监听之@EventListener注解的源码跟踪和详细记录

spring事件发布和监听之@EventListener注解的源码跟踪和详细记录.一是实现ApplicationListener接口,重写onApplicationEvent方法来处理逻辑,二是我们在方法体上增加@EventListener注解。因为@EventListener注解使用上方便简洁,本文从源码上理解事件发布代码eventPublisher.publishEvent(new LoginEvent(account.getName())); 到分析发布的过程@EventListener的实现逻辑。

m0_68615056的博客 1207

Android软键盘系统深度解析:架构、原理与实现

Android软键盘系统深度解析:架构与实现原理 本文系统剖析了Android软键盘的核心工作机制。作为系统级输入服务,软键盘具有双重属性:既是可安装的独立应用,又深度集成于系统框架中。文章详细解读了软键盘的系统架构,包括其与InputMethodManagerService(IMMS)和WindowManagerService(WMS)的交互机制,以及通过InputConnection实现的跨进程通信流程。同时分析了输入法窗口的特殊管理策略、布局调整模式,并深入探讨了输入预测引擎的实现原理,包括词典加载、

保持专注,保持热爱 114

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Spring源码分析:@EventListener

今天天晴,心情不错,来盘他,分析一个Spring常用的事件技术,从源码的角度,以及Spring编写代码的方式来彻彻底底盘他。 先来看注解@EventListener 每一次我看到spring的一个注解,我的脑海就立马浮现 1.有一个在spring生命周期中对应的类来处理它,如果是字段注解,那么一定是在对象实例化之前初始化它给他赋值,那么这个处理类可能就会实现BeanPostProcessor或者...

samll leaf 488

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

@EventListener--- Spring源码从入门到精通(三十)

上篇文章介绍实现ApplicationListener接口实现spring事件监听: ApplicationListener--- Spring源码从入门到精通(二十九) 这篇文章介绍注解实现事件监听@EventListener,eventListener注解如何实现监听某个事件,然后源码里在调用上篇文章说的finishRefresh方法派发事件监听。本篇文章通过代码实例和源码分析来说明eventListener注解。 一、代码实例 自定义userService,方法上用@EventListen

ke1ying的博客 354

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

假人有限元模型

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

Spring学习笔记:@EventListener Spring事件的发布深入学习与使用

本文介绍了Spring框架中的事件发布机制,这是一种基于观察者模式的代码解耦方案。关键组件包括ApplicationEvent(事件类)、ApplicationListener(监听器)、ApplicationEventPublisher(发布者)和ApplicationEventMulticaster(广播器)。从Spring4.2开始,事件发布机制得到增强,支持不继承ApplicationEvent的自定义事件,并可通过@EventListener注解简化监听器实现。文章还详细说明了同步和异步事件处理方

FeiChangWuRao的博客 973

Spring | @EventListener事件机制深度解析

摘要: 本文深入解析Spring事件机制的原理与实现,通过商品删除场景展示模块解耦方案。Spring事件机制基于事件驱动架构,包含事件、监听器、发布器和广播器四大核心组件。文章详细剖析了@EventListener注解的工作原理,包括事件类型解析、监听器注册和事件发布流程。实战部分提供了一个完整的商品删除事件处理Demo,包含自定义事件、发布器及多个监听器实现,展示了如何通过事件机制实现库存、订单和统计模块的解耦,提升系统可维护性。

Andya_net的博客 504

Spring @EventListener详解:事件驱动编程的优雅实现

/ 构造器/getters/setters优势:低耦合、易扩展、与Spring生态无缝集成趋势:结合响应式编程(Spring WebFlux)实现更高效的事件传播演进:未来可能增强对Cloud Event规范的支持思考题:如何实现跨微服务的事件传播?欢迎分享你的分布式事件方案!💬。

全栈开发工程师 564

万字干货解析:一篇带你彻底搞懂@EventListener这个注解

前段时间看到同事在项目里面使用了一个叫做 @EventListener 的注解。在这之前,我知道这个注解的用法和想要达到的目的,但是也仅限于此,其内部工作原理对我来说是一个黑盒,我完完全全不知道它怎么就实现了“监听”的效果。现在既然已经出现在项目里面了,投入上生产上去使用了,所以我打算盘一下它,以免以后碰到问题的时候错过一个装逼的...哦,不。错过一个表现自己的机会。

wdj_yyds的博客 7317

spring中@EventListener 的详解和使用

spring 监听器的使用 @EventListener

keanu20191101的博客 1677

Spring事件监听机制@EventListener源码解析

目录 1、前期准备 2、创建和注册事件监听器 (1)EventListenerMethodProcessor.class (2)SmartInitializingSingleton -> Spring的回调 3、发布事件 1、前期准备 Spring容器在启动的时候初始化EventListenerMethodProcessor和 DefaultEventListenerFactory,当Spring Bean 创建完成后,会调用EventListenerMethodProcessor的

swadian2008的博客 1160

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

监听器ApplicationListener用法写一个监听器发布事件ApplicationListener原理多播器注册监听器发布事件 监听器方法回调发布事件的流程@EventListener用法@EventListener原理 监听器的实现有两种方式: 实现ApplicationListener接口 加@EventListener ApplicationListener用法 ApplicationListener通过监听容器中发布的一些事件,事件发生就会触发监听器的回调,就完成了事件驱动开发 写一个监

flora 2559

spring事件监听器系列二:@EventListener注解原理

前面的笔记中,有写过,我们要在spring中声明一个事件监听器,有两种方式,一种是实现ApplicationListener接口,一种是通过@EventListener注解来修饰一个方法,并在该注解中,指定要监听的事件,那这个方法在事件发生的时候,会被回调 这两种机制,其实我们先不看代码,去考虑下,实现的方式很有可能就是: 对于实现接口这种方式,是ApplicationListenerDetector这个类来完成解析的 对于注解这种方式,是EventListenerMethodProcessor和Defau

小小少年的博客 4661

Spring事件监听机制源码分析

Spring事件监听机制源码分析

618
上一篇: @Autowired、@Resource区别详解及特殊应用场景
下一篇: Java 创建事件(Event)、事件监听器(EventListener)、事件发布(publishEvent)详解
鲨鱼辣椒不吃辣c
博客等级 码龄8年 1万+粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值