首页 > 编程语言 >Java事件侦听器学习记录

Java事件侦听器学习记录

时间:2024-02-23 16:34:11浏览次数:40  
标签:Java 记录 监听 event 侦听器 事件 CustomEvent println public

前言

我们监听事件之前要有事件源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框架自带易维护,集成简单
  • 缺点:无法支撑大并发,只能单机通知,无法排队,无法削峰。

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

标签:Java,记录,监听,event,侦听器,事件,CustomEvent,println,public
From: https://www.cnblogs.com/Galaxy1/p/18029856

相关文章

  • java面向对象之封装-抽象-继承-组合-多态五种概念一网打尽
    说明曾经在学习java面向对象时,你是否会为面向对象的封装-继承-抽象-多态-组合等各种概念搞得稀里糊涂,乃至反复阅读,背诵其相关概念,结果一段时间过后又还给了时间。。。这种经历简直令人发指,让人无法忍受,难道就没有哪个地方能把它一次说清楚,老百姓看了以后纷纷醍醐灌顶,不再重蹈覆......
  • java中 break和continue区别
    breakcontinue◆break在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环不执行循环中剩余的语句。(break语句也在switch语句中使用)◆continue语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句接着进行下一次是否执行循环的判......
  • 浏览器录屏技术:探索网页内容的视觉记录之道
    在当今数字化时代,浏览器录屏技术已经成为了一种强大的工具,用于记录和分享网页内容的视觉体验。无论是用户体验测试、教育培训、产品演示还是远程协作,浏览器录屏技术都能提供便捷、高效的解决方案。在线录屏|一个覆盖广泛主题工具的高效在线平台(amd794.com)amd794.com/reco......
  • java的基本循环结构之For循环
    1、For循环虽然所有循环结构都可以用while或者do...while表示,但Java提供了另一种语句--for循环,使一些循环结构变得更加简单。◆for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构。◆for循环执行的次数是在执行前就确定的。语法格式如下:for(初始化;布尔表......
  • 记录pyinstaller 打包 pdfplumber 问题解决过程
    今天有一个pdf文件处理需求,使用pdfplumber库完成,python环境是3.11+win10pyinstaller5.10.1打包完成后,工具可以顺利打开,但是执行处理的时候报错File"pypdfium2_raw\bindings.py",line93,in<module>File"pypdfium2_raw\bindings.py",line83,in_register_library......
  • python调用Javascript实践
    一、背景知识1、Node.jsjavacript的运行环境有两个:浏览器、node.jsNode.js是一个开源与跨平台的JavaScript运行时环境。它是一个可用于几乎任何项目的流行工具!Node.js在浏览器外运行V8JavaScript引擎(GoogleChrome的内核)。这使Node.js表现得非常出色。运行js的命......
  • java 异步导出zip压缩包
    需求:图片文件太大,采用压缩包下载/** *图片zip压缩包下载 *@paramresponse *@paramzipName压缩包名字 *@paramurls文件图片下载URL路径 *@paramimagesUrlsURL与对应文件名字map *@throwsException */publicstaticvoidexportZip(HttpServletRespon......
  • java的基本循环结构之while循环
    1、while循环◆while是最基本的循环,它的结构为:while(布尔表达式){//循环内容只要布尔表达式为true,循环就会一直执行下去。我们大多数情况是会让循环停止下来的,我们需要一个让表达式失效的方式来结束循环少部分情况需要循环一直执行,比如服务器的请求响应监听等。循环条件一......
  • java的基本流程控制情况
    1、顺序结构顺序结构◆JAVA的基本结构就是顺序结构除非特别指明,否则就按照顺序一句一句执行。◆顺序结构是最简单的算法结构。语句与语句之间,框与框之间是按从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本算法结构。2、if单......
  • rabbitmq学习记录
    一、RabbitMQ的概念RabbitMQ是一个消息中间件:它接受并转发消息。你可以把它当做一个快递站点,当你要发送一个包裹时,你把你的包裹放到快递站,快递员最终会把你的快递送到收件人那里,按照这种逻辑RabbitMQ是一个快递站,一个快递员帮你传递快件。RabbitMQ与快递站的主要区别在于:它不......