【SpringBoot】解析Springboot事件机制,事件发布和监听
2023-12-13 18:21:14
解析Springboot事件机制,事件发布和监听
一、Spring的事件是什么
Spring的事件监听(也叫事件驱动)(Application Event)为Bean与Bean之间的消息通信提供了支持,是观察者模式的一种实现,只要是观察者模式,就含有主题(针对该主题的事件),发布者(发布主题或事件),订阅者(监听主题的人)。有三个部分组成,事件(ApplicationEvent)、监听器(ApplicationListener)和事件发布操作。
它的作用:使用事件机制我们可以将相互耦合的代码解耦,从而方便功能拓展和调整。
事件机制中有三种角色:发布事件者、事件、事件监听者
- 发布事件者:发布事件的对象
- 事件:事件的具体内容
- 事件监听者:等待处理时间的对象
二、使用步骤
2.1 依赖处理
SpringBoot相应的依赖已经包含在 context 包了,所以我们使用的时候不需要在 pom.xml 文件中再单独添加。如图所示:
2.2 定义事件实体类
事件类需要继承 ApplicationEvent 类
示例:定义一个报警事件,属性是报警实体类,也可以是其他字段或者实体根据业务自定义
package com.example.demozmq.event;
import org.springframework.context.ApplicationEvent;
/**
* 定义一个报警事件,属性是报警实体类
*/
public class AlarmEvent extends ApplicationEvent {
private PfsAlarm pfsAlarm;
public AlarmEvent(Object source, PfsAlarm pfsAlarm) {
super(source);
this.pfsAlarm = pfsAlarm;
}
public PfsAlarm getPfsAlarm() {
return pfsAlarm;
}
}
2.3 定义事件监听类
事件监听类,实现 ApplicationListener 接口,泛型是<自定义的事件实体类>
package com.example.demozmq.listener;
import com.example.demozmq.event.AlarmEvent;
import java.util.concurrent.TimeUnit;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class AlarmListener implements ApplicationListener<AlarmEvent> {
@Override
public void onApplicationEvent(AlarmEvent alarmEvent) {
log.info(">>>>>>>>>>>>>>>>>>> 执行事件监听开始,调用参数是:{}", alarmEvent.getPfsAlarm());
try {
// 此处是执行具体的业务处理逻辑
TimeUnit.SECONDS.sleep(100);
log.info(">>>>>>>>>>>>>>>>>>> 执行具体的任务完成!");
} catch (Exception e) {
e.printStackTrace();
}
log.info(">>>>>>>>>>>>>>>>>>> 执行事件监听结束");
}
}
如下图所示实际的应用示例:
2.4 事件发布
以下两处皆为事件发布,只是不同业务而已,可以参照哈
三、异步调用
3.1 启用异步调用
3.2 监听器方法上添加 @Async 注解
本文完结!
文章来源:https://blog.csdn.net/weixin_44299027/article/details/134839770
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!