首页 > 其他分享 >【spring】spring事件监听机制

【spring】spring事件监听机制

时间:2024-02-24 16:47:15浏览次数:27  
标签:event spring message public 事件 Spring CustomEvent 机制 监听

Spring框架的事件监听机制是基于观察者模式设计的,它允许应用程序的不同组件之间通过发布和订阅事件进行松散耦合的通信。以下是对Spring事件监听机制的基本流程和技术要点:

  1. ApplicationEvent

    • Spring中的所有事件都必须继承自org.springframework.context.ApplicationEvent类,这个类封装了事件发生时传递的数据。
  2. 自定义事件

    • 为了处理特定的业务逻辑,通常会创建一个自定义事件类,该类继承自ApplicationEvent,并添加相应的属性来携带事件数据。
public class CustomEvent extends ApplicationEvent {
    public CustomEvent(Object source, String message) {
        super(source);
        this.message = message;
    }

    private String message;

    // getter and setter methods...
}
  1. ApplicationListener
    • 任何想要接收和处理事件的对象都需要实现org.springframework.context.ApplicationListener接口,并且泛型参数为要处理的事件类型。
@Component
public class CustomEventListener implements ApplicationListener<CustomEvent> {

    @Override
    public void onApplicationEvent(CustomEvent event) {
        System.out.println("Received custom event: " + event.getMessage());
        // 在此处执行具体的事件处理逻辑
    }
}
  1. 事件发布
    • Spring容器提供了ApplicationContext接口,它可以用来发布事件。
@Autowired
private ApplicationContext applicationContext;

public void publishEvent() {
    CustomEvent event = new CustomEvent(this, "A custom message");
    applicationContext.publishEvent(event); // 发布事件
}
  1. 异步处理

    • 默认情况下,Spring事件监听器是同步调用的。但可以通过配置ApplicationEventMulticaster来支持异步处理事件。
    • 配置SimpleApplicationEventMulticaster并设置一个异步任务执行器(如TaskExecutor)可以实现异步处理事件。
  2. 事件传播顺序

    • 监听器按照它们在Spring容器中注册的顺序依次执行,如果需要自定义顺序,可以通过@Order注解或实现Ordered接口来控制。
  3. 事件多播器(ApplicationEventMulticaster)

    • ApplicationEventMulticaster接口是Spring用于管理事件广播的核心组件,它负责将事件分发给所有感兴趣的监听器。Spring默认提供了一个简单的实现SimpleApplicationEventMulticaster

总结来说,Spring事件监听机制提供了一种灵活的方式来解耦应用中的不同组件,在不直接引用彼此的情况下通过事件来进行通信。当某个事件被触发时,实现了对应事件监听器接口的bean就会接收到通知并执行相应逻辑。

标签:event,spring,message,public,事件,Spring,CustomEvent,机制,监听
From: https://www.cnblogs.com/cuipengchong/p/18031231

相关文章

  • C#手写http监听
    在应用程序中有时需要一个http接口来与第三方通讯。下面是个简单的代码示例:1publicasyncvoidStartHttpListener(stringurl)2{3HttpListenerhttpListener=newHttpListener();4httpListener.Prefixes.Add(url);5httpListener.Start();6whi......
  • SpringBoot + Redis 的配置及使用
    一、SpringBoot配置Redis1.1pom引入spring-boot-starter-data-redis包<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></......
  • 什么是Java中的SPI机制
    SPI,全称ServiceProviderInterface,是Java中提供的一种服务发现机制它允许应用程序动态地加载和使用第三方提供的服务实现,而无需在代码中引用这些实现类。JavaSPI是基于接口编程思想的具体体现,通过将服务接口和其实现分离,从而具备更好的可扩展性和可维护性如何定义一个Java......
  • Spring Boot 入门
    1、基本介绍简化Spring应用开发的一个框架、整个Spring技术栈的一个大整合;J2EE开发的一站式解决方案;优点:快速创建独立运行的Spring项目以及与主流框架集成;使用嵌入式的Servlet容器,应用无需打成WAR包;starters自动依赖与版本控制;大量的自动配置,简化开发,也可修改默认值;无......
  • cinder卷保留机制
     默认情况下,当您删除一个卷时,该卷的状态会变为 deleted,但它仍然会保留在数据库中,直到一个后台任务(通常是 cinder-volume 服务中的 volume_expire)运行并清理这些已标记为删除的卷。这个任务的运行频率可以通过配置文件的设置来控制。具体来说,您可以查看 cinder.conf 配置......
  • SpringMVC学习
    SpringMVC是Spring提供的用于简化web开发的框架。 1.5 Servlet能够响应请求的对象。接收请求,返回响应SpringMVC可以认为是Servlet的封装。  1.6SpringMVC开发流程回顾各种配置。Controller,DispatchServlet, 1.7......
  • Spring集成Nacos配置中心
    spring版本4.2.8  nacos:1.1.0 jdk1.8引入依赖<dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-spring-context</artifactId><version>1.1.1</version>......
  • 玩转SpringBoot:动态排除Starter配置,轻松部署
    引言在软件开发中,进行本地单元测试是一项常规且必要的任务。然而,在进行单元测试时,有时需要启动一些中间件服务,如Kafka、Elasticjob等。举例来说,我曾经遇到过一个问题:项目中使用了Redisson锁,但由于Redisson版本较低,在Mac环境下偶尔会报错#RedisConnectionException:Unabletoin......
  • 一种用于多线程中间状态同步的屏障机制
    一种用于多线程中间状态同步的屏障机制为了解决在多线程环境中,需要一个内置的计数屏障对于多个线程中的某一个部分进行检查,确保所有线程均到达该点后才能继续执行。该屏障常被用于多线程流水线中的中间检查,适用于阶段分割,是一种有效的同步机制。此处构建了一个barrier类,其中arr......
  • 30.基于gitlab的持续集成机制
    一般代码提交流程开发人员从远程中央仓库(例如dev)拉取最新的代码本地创建自己的分支在自己的分支中进行开发在完成一个功能并通过自测后,提交本地版本库将本地版本库推送到远程中央仓库自己的分支在远程中央仓库自己的分支中,提交MergeRequest(合并请求,简称MR)。源......