【SpringBoot源码】掌握了监听机制的本质开发中这真的很爽

本文详细介绍了SpringBoot中的默认监听器,包括它们监听的事件类型、如何自定义监听所有或特定事件,以及Spring与Kafka的集成示例。重点在于理解事件驱动的架构和如何扩展应用程序功能。
摘要由CSDN通过智能技术生成

1.SpringBoot中默认的监听器


首先来回顾下SpringBoot中给我们提供的默认的监听器,这些都定义在spring.factories文件中。

| 监听器 | 监听事件 | 说明 |

| — | — | — |

| ClearCachesApplicationListener | ContextRefreshedEvent | 当触发ContextRefreshedEvent事件会清空应用的缓存 |

| ParentContextCloserApplicationListener | ParentContextAvailableEvent | 触发ParentContextAvailableEvent事件会完成父容器关闭的监听器 |

| CloudFoundryVcapEnvironmentPostProcessor | ApplicationPreparedEvent | 判断环境中是否存在VCAP_APPLICATION或者VCAP_SERVICES。如果有就添加Cloud Foundry的配置;没有就不执行任何操作。 |

| FileEncodingApplicationListener | ApplicationEnvironmentPreparedEvent | 文件编码的监听器 |

| AnsiOutputApplicationListener | ApplicationEnvironmentPreparedEvent | 根据 spring.output.ansi.enabled参数配置 AnsiOutput |

| ConfigFileApplicationListener | ApplicationEnvironmentPreparedEvent <br>ApplicationPreparedEvent | 完成相关属性文件的加载,application.properties

application.yml

前面源码内容详细讲解过 |

| DelegatingApplicationListener | ApplicationEnvironmentPreparedEvent | 监听到事件后转发给环境变量 context.listener.classes指定的那些事件监听器 |

| ClasspathLoggingApplicationListener | ApplicationEnvironmentPreparedEvent <br>ApplicationFailedEvent | 一个SmartApplicationListener,对环境就绪事件ApplicationEnvironmentPreparedEvent/应用失败事件ApplicationFailedEvent做出响应,往日志DEBUG级别输出TCCL(thread context class loader)的classpath。 |

| LoggingApplicationListener | ApplicationStartingEvent <br>ApplicationEnvironmentPreparedEvent <br>ApplicationPreparedEvent <br>ContextClosedEvent <br>ApplicationFailedEvent | 配置 LoggingSystem。使用 logging.config环境变量指定的配置或者缺省配置 |

| LiquibaseServiceLocatorApplicationListener | ApplicationStartingEvent | 使用一个可以和Spring Boot可执行jar包配合工作的版本替换liquibase ServiceLocator |

| BackgroundPreinitializer | ApplicationStartingEvent <br>ApplicationReadyEvent <br>ApplicationFailedEvent | 尽早触发一些耗时的初始化任务,使用一个后台线程 |

2.SpringBoot中的事件类型


然后我们来看下对应的事件类型,SpringBoot中的所有的事件都是继承于 ApplicationEvent这个抽象类,在SpringBoot启动的时候会发布如下的相关事件,而这些事件其实都实现了 SpringApplicationContext接口。

| 事件 | 说明 |

| — | — |

| ApplicationStartingEvent | 容器启动的事件 |

| ApplicationEnvironmentPreparedEvent | 应用处理环境变量相关的事件 |

| ApplicationContextInitializedEvent | 容器初始化的事件 |

| ApplicationPreparedEvent | 应用准备的事件 |

| ApplicationFailedEvent | 应用启动出错的事件 |

| ApplicationStartedEvent | 应用Started状态事件 |

| ApplicationReadyEvent | 应用准备就绪的事件 |

也就是这些事件都是属于SpringBoot启动过程中涉及到的相关的事件

image.png

当然在启动过程中还会发布其他的相关事件,大家可以自行查阅相关源码哦

3.自定义事件


接下来我们通过几个自定义事件来加深下对事件监听机制的理解

3.1 监听所有事件

我们先创建一个自定义监听器,来监听所有的事件。创建一个Java类,实现ApplicationListener接口在泛型中指定要监听的事件类型即可,如果要监听所有的事件,那么泛型就写ApplicationEvent。

image.png

之后为了在容器启动中能够发下我们的监听器并且添加到SimpleApplicationEventMulticaster中,我们需要在spring.factories中注册自定义的监听器

image.png

这样当我们启动服务的时候就可以看到相关事件发布的时候,我们的监听器被触发了。

image.png

3.1 监听特定事件

Kafka实战笔记

关于这份笔记,为了不影响大家的阅读体验,我只能在文章中展示部分的章节内容和核心截图

image.png

  • Kafka入门
  • 为什么选择Kafka
  • Karka的安装、管理和配置

image.png

  • Kafka的集群
  • 第一个Kafka程序
  • image.png

afka的生产者

image.png

  • Kafka的消费者
  • 深入理解Kafka
  • 可靠的数据传递

image.png

image.png

  • Spring和Kalka的整合
  • Sprinboot和Kafka的整合
  • Kafka实战之削峰填谷
  • 数据管道和流式处理(了解即可)

image.png

  • Kafka实战之削峰填谷

image.png

fka的整合**

  • Kafka实战之削峰填谷
  • 数据管道和流式处理(了解即可)

[外链图片转存中…(img-zg1CIgdE-1714157500758)]

  • Kafka实战之削峰填谷

[外链图片转存中…(img-61Nv2D4c-1714157500758)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 9
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值