如何实现Spring Event(异步事件)

作者:upupup-999 时间:2023-08-23 05:06:47 

一、叙述

当Spring的事件(Application Event)为Bean和Bean之间的消息同步提供了支持。

当一个Bean处理完成一个任务之后,希望另外一个Bean知道并能做相应的处理,这时我们就需要让另外一个Bean监听当前Bean所发生的事件

Spring的事件需要遵循如下流程

  • 自定义事件,继承ApplicationEvent

  • 定义事件 * ,实现ApplicationListener

  • 使用容器发布事件

Spring框架中事件

Spring提供了以下5种标准的事件:

  • 上下文更新事件(ContextRefreshedEvent):在调用ConfigurableApplicationContext 接口中的refresh()方法时被触发。

  • 上下文开始事件(ContextStartedEvent):当容器调用ConfigurableApplicationContext的Start()方法开始/重新开始容器时触发该事件。

  • 上下文停止事件(ContextStoppedEvent):当容器调用ConfigurableApplicationContext的Stop()方法停止容器时触发该事件。

  • 上下文关闭事件(ContextClosedEvent):当ApplicationContext被关闭时触发该事件。容器被关闭时,其管理的所有单例Bean都被销毁。

请求处理事件(RequestHandledEvent):在Web应用中,当一个http请求(request)结束触发该事件。

如果一个bean实现了ApplicationListener接口,当一个ApplicationEvent被发布以后,bean会自动被通知

二、上Demo示例

1. pom文件


2. 自定义一个事件继承ApplicationEvent

import com.hrm.dto.ExamAnswer;
import org.springframework.context.ApplicationEvent;
/**
* 考生答题事件
*/
public class AnswerEvent extends ApplicationEvent {
   private static final long serialVersionUID = 1L;
   public AnswerEvent(ExamAnswer answer) {
       super(answer);
   }
}

3. 自定义一个 * 实现ApplicationListener

import com.hrm.dto.ExamAnswer;
import com.hrm.service.event.AnswerEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.stereotype.Component;
/**
* 答题监听事件
*/
@Component
@EnableAsync
public class AnswerEventListener implements ApplicationListener

4. 再来一个事件发布类

import com.hrm.dto.ExamAnswer;
import com.hrm.service.event.AnswerEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Repository;
@Repository
public class ExamAnswerDaoImpl implements ExamAnswerDao {
   @Autowired
   private ApplicationContext applicationContext;
private void putAnswerToSpringEvent(ExamAnswer examAnswer) {
发送Spring Event 事件
       applicationContext.publishEvent(new AnswerEvent(examAnswer));
   }
}

来源:https://blog.csdn.net/weixin_44446784/article/details/124321187

标签:Spring,Event,异步事件
0
投稿

猜你喜欢

  • Java实现添加,读取和删除Excel图片的方法详解

    2023-11-27 06:29:33
  • Java实现动态模拟时钟

    2022-07-25 17:35:25
  • Java语法基础之循环结构语句详解

    2023-09-06 21:37:28
  • Java实现驼峰和下划线互相转换的示例代码

    2023-12-16 15:23:48
  • 详解Android如何实现阴影效果

    2022-04-14 13:11:16
  • Android GPS获取当前经纬度坐标

    2021-10-31 12:09:40
  • Spring AOP的概念与实现过程详解

    2023-02-17 02:54:12
  • 详解Java 集合系列(三)—— LinkedList

    2022-01-30 16:49:10
  • Android的OkHttp包处理用户认证的代码实例分享

    2022-04-25 00:00:52
  • List转换成DataSet实现代码

    2023-03-02 04:46:01
  • Android中TabLayout+ViewPager实现tab和页面联动效果

    2022-02-23 22:41:49
  • 解决mybatis 中collection嵌套collection引发的bug

    2023-03-20 20:55:39
  • C# 开发(创蓝253)手机短信验证码接口的实例

    2023-05-22 11:15:54
  • spring-boot @Component和@Bean的区别详解

    2023-06-28 16:10:36
  • Android 中StringBuffer 和StringBuilder常用方法

    2023-10-29 08:39:26
  • c语言10个经典小程序

    2023-11-03 01:11:35
  • Java全面细致讲解==和equals的使用

    2021-08-20 05:28:43
  • Monaco Editor实现sql和java代码提示实现示例

    2023-01-31 16:59:48
  • 详细了解C# 枚举与位枚举

    2023-02-19 17:36:57
  • Triple协议支持Java异常回传设计实现详解

    2021-08-16 17:16:09
  • asp之家 软件编程 m.aspxhome.com