软件编程
位置:首页>> 软件编程>> java编程>> 如何实现Spring Event(异步事件)

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

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

标签:Spring,Event,异步事件

一、叙述

当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

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com