Java事件侦听器学习记录
前言
我们监听事件之前要有事件源source,创建事件源(Event),发布事件(publishEvent),然后才能到监听事件。
事件驱动机制是观察者模式(称发布订阅)具体实现,事件对象(Event)相当于被观察对象(Subject), 事件监听(EventListener) 相当于观察者(Observer)
1、包结构(个人):
2、创建事件源(Event)
@Getter public class CustomEvent extends ApplicationEvent { private String message; public CustomEvent(Object source, String message) { super(source); this.message = message; } }
3、发布事件(publishEvent)
@Api(tags = "测试事件侦听器") @RestController @RequestMapping("/listen") public class ListenController { @Resource private ApplicationEventPublisher publisher; @GetMapping("/test") @ApiOperation(value = "测试事件侦听器") // @Transactional(rollbackFor = Exception.class) public Result<?> test() { CustomEvent event = new CustomEvent(this, "test msg"); System.out.println(Thread.currentThread().getName()); publisher.publishEvent(event); return Result.ok(); } }
4. 监听事件,两种方式:
4.1 注解@EventListener方式监听事件:
在方法上添加@EventListener注解,即可监听
@Component public class CustomEventListener { @EventListener // @TransactionalEventListener(phase = TransactionPhase.BEFORE_COMMIT) public void handleEvent(CustomEvent event){ System.out.println("recevied msg:" + event.getMessage()); System.out.println(Thread.currentThread().getName()); } }
4.2 实现ApplicationListener接口监听事件
实现ApplicationListener接口,泛型既是需要添加的事件对象
@Component public class CustomEventListener implements ApplicationListener<CustomEvent> { @Override public void onApplicationEvent(CustomEvent event) { System.out.println("recevied msg:" + event.getMessage()); System.out.println(Thread.currentThread().getName()); } }
5. 事件驱动机制和RabbitMQ驱动机制对比
RabbitMQ驱动:
- 作用:解耦、异步、削峰,就不过多解释了。
- 优点:MQ可供并发量大、微服务使用
- 缺点:使用MQ会提升架构的复杂度,维护性降低。
事件驱动机制:
- 解耦、异步,做不到削峰。
- 优点:spring框架自带易维护,集成简单
- 缺点:无法支撑大并发,只能单机通知,无法排队,无法削峰。
总结:消息量不大时就可以使用事件驱动机制
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了