首页 > 其他分享 >Spring框架中的事件(Event)

Spring框架中的事件(Event)

时间:2023-08-29 14:33:17浏览次数:42  
标签:监听器 框架 Spring MyEvent public 事件 发布者 Event 自定义

什么是事件机制?

Spring的事件(Event)机制是一种在应用程序中实现模块之间解耦和信息传递的机制。它基于发布者-订阅者模式,通过事件的发布和监听来实现组件之间的通信。

基本概念:

  1. 事件类(Event Class):在Spring框架中,事件是通过定义一个继承自ApplicationEvent类的自定义事件类来表示的。这个事件类包含了相关的数据和方法。
  2. 事件发布者(Event Publisher):事件发布者负责创建并发布事件。它通常是一个组件或服务,可以使用ApplicationEventPublisher接口来发布事件。通过调用publishEvent()方法,事件发布者将事件发送给所有注册的监听器。
  3. 事件监听器(Event Listener):事件监听器负责订阅感兴趣的事件,并在事件发生时执行相应的逻辑。监听器需要实现ApplicationListener接口,并通过泛型指定所要监听的事件类型。当事件被发布时,相关的监听器会被自动调用。
  4. 事件处理:事件处理逻辑位于监听器中,当监听器接收到事件时,可以根据具体需求进行相应的处理操作,比如执行业务逻辑、发送通知等。

带来了什么好处?

它促进了模块的解耦。通过将发布者和监听器分离,可以使代码更加灵活和可维护。另外,事件还可以用于实现日志记录、性能监控、缓存清除等应用场景。但是事件机制适用于较为复杂的应用程序,当应用程序规模较小或简单时,可能并不需要引入事件机制。

如何使用?(简单示例)

定义自定义事件类:

public class MyEvent extends ApplicationEvent {
    // 自定义事件类需要继承ApplicationEvent

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

    // 可以添加自定义的数据和方法
}

事件发布者:

@Component
public class EventPublisher {

    @Autowired
    private ApplicationEventPublisher eventPublisher;

    public void publishCustomEvent() {
        // 创建并发布自定义事件
        MyEvent event = new MyEvent(this);
        eventPublisher.publishEvent(event);
    }
}

事件监听器:

@Component
public class MyCustomEventListener implements ApplicationListener<MyEvent> {

    @Override
    public void onApplicationEvent(MyEvent event) {
        // 监听到事件后执行相应的处理逻辑
        System.out.println("获取到自定义事件数据: " + event.toString());
    }
}

在上述示例中,ApplicationEventPublisher负责发布MyEvent事件,而MyCustomEventListener监听该事件,并在收到事件时打印一条消息。

通过这种方式,发布者和监听器之间的耦合度较低,可以方便地扩展和管理事件处理逻辑。

Spring框架中的事件(Event)_Spring Event

标签:监听器,框架,Spring,MyEvent,public,事件,发布者,Event,自定义
From: https://blog.51cto.com/u_16226278/7276697

相关文章

  • Spring Boot - 引入 validation 对参数或实体类进行校验不管用
    版本说明我的父工程版本号是3.1.0。file:[pom.xml]<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.0</version><relativePath/><!--......
  • 015-管理后台框架布局搭建
    1.功能分析管理后台我们先看下大体页面布局如下包含左侧菜单栏,头部导航栏,tab窗体,还有内容显示区域,以及页脚.2.基本实现2.1.文件引入2.2.页面引入引入hplus下的index.html2.3.页面调整我们需要对css,js等做调整,可以使用thymeleaf方式引入<!--css相关调整--><linkrel="sho......
  • 【muduo】net篇---EventLoopThread和EventLoopThreadPool
    EventLoopThread是事件循环线程,包含一个Thread对象,一个EventLoop对象。在构造函数中,把EventLoopThread::threadFunc注册到Thread对象中(线程启动时会回调)。EventLoopThreadPool是事件循环线程池,管理所有客户端连接,每个线程都有唯一一个事件循环。可以调用setThreadNum设置线程的数......
  • 【muduo】net篇---EventLoop
    EventLoop类调用Poller::poll()进行I/O复用,返回活跃事件列表,然后遍历该列表,依次调用每一个活跃Channel的事件处理函数handleEvent(),最终回调了TcpConnection注册过来的函数。#include<muduo/net/EventLoop.h>#include<muduo/base/Logging.h>#include<muduo/base/Mutex.h>#inc......
  • spring boot WebSocket @ServerEndpoint注解标识的class无法获取spring容器中的bean
    在@ServerEndpoint类中直接使用@Autowired注解注入Spring管理的bean可能不会成功,因为@ServerEndpoint并不受Spring容器的管理。通过创建一个静态的成员遍历属性和一个带有@Autowired注解的setter方法,你可以在类加载时将bean注入到静态属性中。但是,请注意这样做......
  • Spring JdbcTemplate
    什么是JdbcTemplate大家来回顾一下,java中操作db最原始的方式就是纯jdbc了,是不是每次操作db都需要加载数据库驱动、获取连接、获取PreparedStatement、执行sql、关闭PreparedStatement、关闭连接等等,操作还是比较繁琐的。spring中提供了一个模块,对jdbc操作进行了封装,使其更简单,......
  • 架构之选:评价Spring Cloud在微服务完整性方面的独到观点!
    大家好,我是小米!今天我们要来聊一个非常热门的话题:SpringCloud在微服务架构方面的完整度情况。随着技术的不断演进,微服务架构已经成为了众多企业构建灵活、可扩展系统的首选。而SpringCloud作为微服务架构的佼佼者,自然成为了我们必须深入了解的对象。废话不多说,咱们开始吧!前言:微服......
  • 整合MediatR&Cap实现EventBus
    在软件开发中,事件早已被我们所熟悉,一个按钮按下,产生中断事件,一个回车,前端页面有侦听事件,在事件风暴建模活动中,事件也是作为领域建模的突破口,事件的重要性不言而喻。其本质是发生的事实到引发了相关事情,在这其中的传递的信息便是事件的内容。就如同猫叫了,引发着老鼠跑了,主人醒了,其......
  • 基于SpringBoot的装饰工程管理系统
    如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统装饰工程项目信息管理难度大,容错率低,管理人员处理数据费工费时,所以专门为解决这个难题开发了一个装饰工程管理系统项目立......
  • Spring Boot 别再用 Date 作为入参了,LocalDateTime、LocalDate 真香!
    作者:TinyThing链接:https://www.jianshu.com/p/b52db905f0200x0背景项目中使用LocalDateTime系列作为dto中时间的类型,但是spring收到参数后总报错,为了全局配置时间类型转换,尝试了如下3中方法。注:本文基于Springboot2.0测试,如果无法生效可能是spring版本较低导致的。PS:如果你......