(Java基础)回调与监听器的区别

在 Java 框架开发中,经常会遇到“回调(Callback)”和“监听器(Listener)”这两个概念。二者紧密相关,但又有明显区别,理解清楚有助于快速掌握框架事件机制。


一、核心概念

1️⃣ 回调(Callback)

  • 定义:让别人帮你在特定事件发生时调用你定义的逻辑。

  • 特点

    • 是思想/机制,不是具体对象;

    • 只关注“当事件发生时做什么”;

    • 可通过函数、接口、Lambda 等实现。

  • 应用场景:异步处理、一次性事件、短流程任务。

2️⃣ 监听器(Listener)

  • 定义:对象化的回调,用于监听某类事件,当事件发生时自动触发内部方法。

  • 特点

    • 是对象/接口的实现,是回调的一种封装形式;

    • 可以同时监听多种事件(方法),如开始、进行中、完成;

    • 可注册多个监听器,适合异步或重复事件处理。

  • 应用场景:GUI 事件处理、文件/数据监听、网络消息、EasyExcel 数据导入等。


二、回调 vs 监听器的区别

区别维度回调(Callback)监听器(Listener)
本质一段可被调用的逻辑(函数/方法)封装回调方法的对象/接口
调用方式框架或系统在事件发生时调用框架在事件发生时自动调用内部回调方法
结构单一逻辑,通常只处理一个事件封装多个方法,可处理多事件
用途一次性或少量事件处理异步、重复或复杂事件处理,可注册多个监听器
典型示例Runnable、CompletableFuture.thenApply()EasyExcel AnalysisEventListener、Swing MouseListener、Spring ApplicationListener
控制权调用一次,由事件触发事件发生时自动触发,可能多次调用

三、理解思路

  • 回调:强调“在事件发生时执行我提供的逻辑”,是一种设计思想;

  • 监听器:强调“注册+监听+自动触发”,是对象化的回调实现;

  • 关系:监听器内部通常包含多个回调方法,每个方法对应不同的事件处理逻辑。


四、EasyExcel 示例对比

EasyExcel.read(file.getInputStream(), User.class, new UserExcelListener(userMapper))
         .sheet()
         .doRead();
  • 事件源:Excel 解析器,每读取一行数据就是一个事件

  • 监听器UserExcelListener 封装 invoke()doAfterAllAnalysed()

  • 回调方法

    • invoke():每读取一行触发

    • doAfterAllAnalysed():读取完成触发

你无需显式调用方法,监听器自动响应事件,这就是对象化回调的典型应用。


五、总结

  • 回调是思想:让别人帮你调用逻辑;

  • 监听器是实现:对象化封装回调方法,注册到事件源;

  • EasyExcel就是典型应用场景:invoke()doAfterAllAnalysed() 是回调方法,监听器封装这些方法,由框架自动触发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值