当前位置: 首页 > news >正文

SpringBoot中使用监听器

1.定义一个事件

/*** 定义事件* @author hrui* @date 2024/7/25 12:46*/
public class CustomEvent extends ApplicationEvent {private String message;public CustomEvent(Object source, String message) {super(source);this.message = message;}public String getMessage() {return message;}
}

在监听器中可以通过 event.getSource();  来获取事件源

2.通过ApplicationEventPublisher 发布事件

@Service
public class EventPublisherService {@Autowiredprivate ApplicationEventPublisher applicationEventPublisher;public void publishEvent(String message) {CustomEvent event = new CustomEvent(this, message);applicationEventPublisher.publishEvent(event);}
}

3.通过监听器订阅事件

/*** 监听事件,订阅事件* @author hrui* @date 2024/7/25 12:49*/
@Component
public class CustomEventListener {@Async//@EventListener//@TransactionalEventListener 有事务的监听@EventListener(condition = "#event.message == 'hello'") //SPEL(Spring表达式)条件监听 对象也可以用== 判断//@EventListener(condition = "#event.message .equals('hello') ")//@EventListener(condition = "#event.message.endsWith("123") ") //很多方法可以选择public void handleCustomEvent(CustomEvent event) {System.out.println(Thread.currentThread().getName());System.out.println("Received event - " + event.getMessage());}
}

第三步简单实用了@EventListener注解  如果不用就需要这么做

去实现ApplicationListerner<处理的事件>  需不需要异步自己看着办

import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;@Component
public class CustomEventListener implements ApplicationListener<CustomEvent> {@Overridepublic void onApplicationEvent(CustomEvent event) {// 条件判断if ("hello".equals(event.getMessage())) {// 异步处理new Thread(() -> {System.out.println(Thread.currentThread().getName());System.out.println("Received event - " + event.getMessage());}).start();}}
}

/*** @author hrui* @date 2024/7/25 12:51*/
@RestController
public class ListenerController {@Autowiredprivate EventPublisherService eventPublisherService;@GetMapping("/listener")public String listener(String message){eventPublisherService.publishEvent(message);return "listener";}
}

http://www.lryc.cn/news/409410.html

相关文章:

  • mybatise全接触-面试宝典-知识大全
  • Catalyst优化器:让你的Spark SQL查询提速10倍
  • 【Hot100】LeetCode—416. 分割等和子集
  • 前端开发知识-vue
  • 【嵌入式硬件】快衰减和慢衰减
  • C语言 | Leetcode C语言题解之第275题H指数II
  • 速盾:网络安全和 CDN 之间的关系是怎样的?
  • 数据库安全:MySQL安全配置,MySQL安全基线检查加固
  • 【SpringBoot】参数传递
  • Unity 骨骼动画(Skinned Mesh Renderer): 角色动画的高级渲染
  • 花几千上万学习Java,真没必要!(三十四)
  • 【代码】Python3|Scrapy框架初探(汽车之家大连市二手车车辆数据爬取、清洗与可视化)
  • C#中的new以及类
  • Hbase简介和快速入门
  • 【AI落地应用实战】Amazon Bedrock +Amazon Step Functions实现链式提示(Prompt Chaining)
  • vue Ref 和 Reactive 原理解析
  • 【人工智能】Transformers之Pipeline(六):图像分类(image-classification)
  • 编程语言漫谈之「初始化与赋值」——以C++和汇编语言为示例
  • windows使用ssh-agent管理私钥
  • PostgreSQL 之 to_timestamp函数
  • USB3.0的等长要求到底是多少?
  • 力扣高频SQL 50题(基础版)第二十五题
  • 【C++题解】1581. 马里奥的银币1
  • system和popen函数的异同点
  • Python小工具之httpstat网络分析
  • 挑战房市预测领头羊:KNN vs. 决策树 vs. 线性回归
  • Docker 基础知识
  • 视频主题Qinmei 3.0视频站源码_WordPress影视视频主题/附详细安装教程
  • 数字看板:跨行业需求下的创新与升级
  • 02、爬虫数据解析-Re解析