Spring的事件监听(也叫事件驱动)(Application Event)为Bean与Bean之间的消息通信提供了支持,是观察者模式的一种实现,只要是观察者模式,就含有主题(针对该主题的事件),发布者(发布主题或事件),订阅者(监听主题的人)。有三个部分组成,事件(ApplicationEvent)、监听器(ApplicationListener)和事件发布操作。
它的作用:使用事件机制我们可以将相互耦合的代码解耦,从而方便功能拓展和调整。
事件机制中有三种角色:发布事件者、事件、事件监听者
SpringBoot相应的依赖已经包含在 context 包了,所以我们使用的时候不需要在 pom.xml 文件中再单独添加。如图所示:
事件类需要继承 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; } }
事件监听类,实现 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(">>>>>>>>>>>>>>>>>>> 执行事件监听结束"); } }
如下图所示实际的应用示例:
以下两处皆为事件发布,只是不同业务而已,可以参照哈
本文完结!