首页 > 其他分享 >[ Spring事件发布与监听 ]

[ Spring事件发布与监听 ]

时间:2023-04-07 15:03:14浏览次数:34  
标签:Spring 监听 发布 IEvent UploadPhotoEvent public 事件

Spring事件监听与发布


主要有以下部分:

事件(被监听的玩意),事件发布(把这个事件发布出去), 事件监听(用来监听事件, 并做行动)


项目中, 因为事件类型不同, 可以先定义事件的接口:

  • Ievent:
public interface IEvent {
}

对于具体的事件, 可以实现IEvent接口: (ep:后端需要判断一个对象中是否需要上传一张照片)

  • UploadPhotoEvent:
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor(staticName = "of")
public class UploadPhotoEvent implements IEvent {
    private Photo photo;
}

对于事件发布, 可以写方法封装以下:这样指定了事件类型为IEvent

ApplicationEventPublisher有两种方法可以发布事件,

通常调用publishEvent(ApplicationEvent event)方法, 对象需要为ApplicationEvent, 但底层又调用了publishEvent(Object o)

  • EventPublish
@Component
@RequiredArgsConstructor
public class EventPublisher {

    private final ApplicationEventPublisher publisher;

    public void publish(IEvent event) {
        publisher.publishEvent(event);
    }
}

事件发布需要写在需要把事件发布了的地方, 通常在代码中:

  • 实际需要发布的地方:
@Service
public class SomeService() {
    private static final EventPublisher eventPublisher;
    public void someMethod() {
        //photo 
        eventPublisher.publishEvent(UploadPhotoEvent.of(photo));
    }
}

事件监听: 也可以写一个接口, 用于规范事件监听的实用:

  • IEventListener 接口中只写监听到这个事件之后的函数名, 对于项目来说, 可以先配置一个异步的线程池, 用于异步的执行监听到的事件。
public interface IEventListener<E extends IEvent> {
    @Async("executor")
    void onEvent(E event);
}

对于这个事件的监听:

  • UploadPhotoEventListener
@Slf4j//用于打印日志
@Component
@RequiredArgsConstructor
public class UploadPhotoEventListener implements IEventListener<UploadPhotoEvent> {

    @Override
    @EventListener
    public void onEvent(UploadPhotoEvent event) {
        //具体需要执行的内容
    }
}

所以, 总结来说, 一个事件发布需要4个部分内容:

事件定义:

  • IEvent: 事件接口

  • UploadPhotoEvent: 具体的事件

事件发布:

  • EventPublish(核心为sping的ApplicationEventPublisher类)

程序中发布事件:

  • eventPublish.publishEvent(具体事件)

事件监听:

  • IEventListener: 事件监听借口

  • UploadPhotoEventListener: 具体事件的监听, 实现IEventListener接口, with@EventListener注解

标签:Spring,监听,发布,IEvent,UploadPhotoEvent,public,事件
From: https://www.cnblogs.com/Roy2048/p/17296175.html

相关文章

  • Spring Boot返回Json数据及数据封装
    1.1简介在项目开发中,接口与接口之间,前后端之间数据的传输都使用Json格式,在SpringBoot中,接口返回Json格式的数据很简单,在Controller中使用@RestController注解即可返回Json格式的数据,@RestController也是SpringBoot新增的一个注解,我们点进去看一下该注解都包含了哪些东西......
  • 元宇宙大事件:“刹那”元宇宙元宇宙大事件:“刹那”元宇宙助力“运动世界校园”开创新纪
    近日,国内领先的元宇宙基础设施服务商“刹那”与头部智慧运动高校服务商万航信息科技发布合作消息称:双方将开发基于“运动世界校园”APP的元宇宙项目,旨在帮助千万大学生进入元宇宙,帮助上百所高校建立校园元宇宙,让更多大学生利用AI工具在元宇宙新场景创新、创造、创业。这次合作也意......
  • 记spring-security升级,引发的redis反序列化不一致问题
    问题解决参考文章如下:https://my.oschina.net/klblog/blog/5559133https://blog.csdn.net/qq_37421368/article/details/124850449问题复现由于一些原因,登录的token由旧版本的微服务存入的redis,另一个新版本的微服务需要取出数据校验springboot版本升级导致spring-secu......
  • 【Spring AOP基础使用:认识AOP,AOP作用,核心概念,AOP实现】
    本文纲要一、了解AOP1、认识AOP2、AOP作用3、AOP核心概念二、AOP快速入门1、基础准备2、AOP实现3、总结三、AOP获取通知数据1、JoinPoint2、ProceedingJoinPoint3、获取通知数据的使用场景进入正文:一、了解AOP1、认识AOPAOP(AspectOrientedProgramming)面向切面编程,一种......
  • SpringBoot @SpringBootApplication(exclude={DataSourceAutoConfiguration.calss})注
    @SpringBootApplication(exclude={DataSourceAutoConfiguration.calss})该注解的作用是,排除自动注入数据源的配置,用exclude属性进行排除指定的类,在springBoot中使用多数据源时,加上@SpringBootApplication(exclude={DataSourceAutoConfiguration.calss})DataSourceAutoConfigur......
  • SpringCloud 多个服务启动放在一个窗口下的设置
    进入.idea文件夹,在workspace.xml文件中加入如下配置即可<componentname="RunDashboard"><optionname="configurationTypes"><set><optionvalue="SpringBootApplicationConfigurationType"/></set&......
  • JS 模拟鼠标事件mouse over、click
     <!DOCTYPEhtml><html><head><metacharset="utf-8"><metahttp-equiv="content-type"content="text/html;charset=utf-8"><metaname="renderer"content="webkit&quo......
  • Spring 源码解析 --Bean 的初始化流程
    --Spring原理架构图   --容器刷新  ---Bean初始化  --Bean生命周期流程 ......
  • Java GenericObjectPool 对象池化技术--SpringBoot sftp 连接池工具类
    JavaBasePooledObjectFactory对象池化技术通常一个对象创建、销毁非常耗时的时候,我们不会频繁的创建和销毁它,而是考虑复用。复用对象的一种做法就是对象池,将创建好的对象放入池中维护起来,下次再用的时候直接拿池中已经创建好的对象继续用,这就是池化的思想。ApacheCommonsPoo......
  • Spring 源码阅读之标签解析
    全局目录.md引子1、容器最基本使用.md系列1-bean标签解析:2、XmlBeanFactory的类图介绍.md3、XmlBeanFactory对xml文件读取.md4、xml配置文件解析之【默认】命名空间【标签】的解析.md5、xml配置文件解析之【自定义】命名空间【标签】的解析.md系列2-bean获取:get......