EasyExcel中AnalysisEventListener<T>抽象类的方法执行顺序

EasyExcel中AnalysisEventListener<T>抽象类 的方法执行顺序 ,我结合EasyExcel读取Excel的完整流程,把触发时机、调用链、执行先后讲得清清楚楚:

一、先明确核心前提

  1. 这个类是EasyExcel读取Excel的核心监听器 ,实现了ReadListener<T>接口,专门处理Excel的表头读取、数据行读取、读取完成逻辑;
  2. 你贴的代码里,invokeHead是框架主动调用 的方法,它内部会直接调用 invokeHeadMap;
  3. 执行顺序严格遵循「实例化 → 读表头 → 读数据行 → 读取完成」的Excel读取流程。

二、完整执行顺序(从启动到结束)

总共5个核心步骤,按先后顺序排列:

第1步:执行【构造方法】
  • 触发时机 :你创建监听器对象 时(比如new ExcelListener()),JVM自动调用;
  • 方法 :public AnalysisEventListener()
  • 作用:初始化监听器对象,最先执行。
第2步:框架调用【invokeHead】(读原始表头)
  • 触发时机 :EasyExcel读取到Excel表头行时,框架自动回调;
  • 方法 :public void invokeHead(...)
  • 作用 :接收Excel原始表头数据(ReadCellData格式),是表头处理的入口方法。
第3步:自动调用【invokeHeadMap】(转字符串表头)
  • 触发时机 :第2步执行完后,立即自动调用 (代码里写死this.invokeHeadMap(...));
  • 方法 :public void invokeHeadMap(...)
  • 作用 :把原始表头转成Map<Integer, String>(列号→表头文字),这个方法是空实现,留给你重写来处理表头。
第4步:循环执行【invoke】(读每一行数据)
  • 触发时机 :表头读完后,逐行读取Excel数据行,每读一行执行一次;
  • 方法 :void invoke(T data, AnalysisContext context)(来自ReadListener接口,你贴的抽象类没实现,子类必须重写);
  • 作用:处理每一行的业务数据。
第5步:执行【doAfterAllAnalysed】(读取完成)
  • 触发时机:所有行(表头+数据)都读取完毕后,最后执行;
  • 方法 :void doAfterAllAnalysed(AnalysisContext context)(来自ReadListener接口,子类重写);
  • 作用:收尾工作(比如数据汇总、关闭资源)。

三、核心调用链(你代码里的关键逻辑)

invokeHead → 直接调用 → invokeHeadMap

这两个方法是连续执行 的,没有间隔,框架只触发invokeHead,剩下的invokeHeadMap由它内部主动调用。


总结

  1. 最先执行:构造方法(对象创建);
  2. 表头处理:invokeHead(框架调)→ 立即执行invokeHeadMap(内部调);
  3. 数据处理:循环执行invoke(每一行数据);
  4. 最后执行:doAfterAllAnalysed(读取结束)。
相关推荐
伯恩bourne1 分钟前
对比 @Configuration(Full) vs @Component(Lite)
java·开发语言
RuoyiOffice3 分钟前
达梦 DM8、openGauss、人大金仓怎么选?RuoYi Office 国产数据库适配与验收指南
java·数据库·spring boot·架构·信创
修船大队长4 分钟前
KL15 高电平请求 FullCom:AUTOSAR 项目调用流程
android·java·服务器
棉猴6 分钟前
玩游戏学Python12-布尔型与条件语句
java·前端·python·玩游戏·游戏编程·pgzero
java_nnnn9 分钟前
Spring Web MVC 入门:从一个 URL 到 Java 后端完整处理请求
java·前端·spring boot·spring
Mikko712 分钟前
fastjson 1.2.84 能在 JDK 7 上跑吗?实测:编译能过,一启动就 UnsupportedClassVersionError
java·后端·jdk·fastjson·安全漏洞
G018_star sky♬17 分钟前
为什么java新建一个对象,需要obj o = new obj()这种写法
java·开发语言
驭渊的小故事3 小时前
MyBatis XML 开发实战:从配置到 CRUD 全解析
xml·java·mybatis
哦虎!8 小时前
【JavaEE】网络初识
java
for_ever_love__9 小时前
MySQL ORDER BY 排序优化:从 Using filesort 到索引有序扫描(含双路 / 单路排序原理)
java·mysql·优化·存储·by·order·filesort