解析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 文件中再單獨添加。如圖所示:
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> {@Overridepublic 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 注解
本文完結!