【SpringBoot】解析Springboot事件机制,事件发布和监听
作者:mmseoamin日期:2023-12-18

解析Springboot事件机制,事件发布和监听

  • 一、Spring的事件是什么
  • 二、使用步骤
    • 2.1 依赖处理
    • 2.2 定义事件实体类
    • 2.3 定义事件监听类
    • 2.4 事件发布
    • 三、异步调用
      • 3.1 启用异步调用
      • 3.2 监听器方法上添加 @Async 注解

        一、Spring的事件是什么

        Spring的事件监听(也叫事件驱动)(Application Event)为Bean与Bean之间的消息通信提供了支持,是观察者模式的一种实现,只要是观察者模式,就含有主题(针对该主题的事件),发布者(发布主题或事件),订阅者(监听主题的人)。有三个部分组成,事件(ApplicationEvent)、监听器(ApplicationListener)和事件发布操作。

        它的作用:使用事件机制我们可以将相互耦合的代码解耦,从而方便功能拓展和调整。

        事件机制中有三种角色:发布事件者、事件、事件监听者

        • 发布事件者:发布事件的对象
        • 事件:事件的具体内容
        • 事件监听者:等待处理时间的对象

          二、使用步骤

          2.1 依赖处理

          SpringBoot相应的依赖已经包含在 context 包了,所以我们使用的时候不需要在 pom.xml 文件中再单独添加。如图所示:

          【SpringBoot】解析Springboot事件机制,事件发布和监听,在这里插入图片描述,第1张

          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 {
              @Override
              public void onApplicationEvent(AlarmEvent alarmEvent) {
                  log.info(">>>>>>>>>>>>>>>>>>>  执行事件监听开始,调用参数是:{}", alarmEvent.getPfsAlarm());
                  try {
                      // 此处是执行具体的业务处理逻辑
                      TimeUnit.SECONDS.sleep(100);
                      log.info(">>>>>>>>>>>>>>>>>>> 执行具体的任务完成!");
                  } catch (Exception e) {
                      e.printStackTrace();
                  }
                  log.info(">>>>>>>>>>>>>>>>>>> 执行事件监听结束");
              }
          }
          

          如下图所示实际的应用示例:

          【SpringBoot】解析Springboot事件机制,事件发布和监听,在这里插入图片描述,第2张

          2.4 事件发布

          以下两处皆为事件发布,只是不同业务而已,可以参照哈

          【SpringBoot】解析Springboot事件机制,事件发布和监听,在这里插入图片描述,第3张【SpringBoot】解析Springboot事件机制,事件发布和监听,在这里插入图片描述,第4张

          三、异步调用

          3.1 启用异步调用

          【SpringBoot】解析Springboot事件机制,事件发布和监听,在这里插入图片描述,第5张

          3.2 监听器方法上添加 @Async 注解

          【SpringBoot】解析Springboot事件机制,事件发布和监听,在这里插入图片描述,第6张

          本文完结!