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框架自带易维护,集成简单
  • 缺点:无法支撑大并发,只能单机通知,无法排队,无法削峰。

总结:消息量不大时就可以使用事件驱动机制

posted @   不爱学习的摆烂王  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示