首先来回顾下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 | 尽早触发一些耗时的初始化任务,使用一个后台线程 |
然后我们来看下对应的事件类型,SpringBoot中的所有的事件都是继承于 ApplicationEvent
这个抽象类,在SpringBoot启动的时候会发布如下的相关事件,而这些事件其实都实现了 SpringApplicationContext
接口。
| 事件 | 说明 |
| — | — |
| ApplicationStartingEvent | 容器启动的事件 |
| ApplicationEnvironmentPreparedEvent | 应用处理环境变量相关的事件 |
| ApplicationContextInitializedEvent | 容器初始化的事件 |
| ApplicationPreparedEvent | 应用准备的事件 |
| ApplicationFailedEvent | 应用启动出错的事件 |
| ApplicationStartedEvent | 应用Started状态事件 |
| ApplicationReadyEvent | 应用准备就绪的事件 |
也就是这些事件都是属于SpringBoot启动过程中涉及到的相关的事件
当然在启动过程中还会发布其他的相关事件,大家可以自行查阅相关源码哦
接下来我们通过几个自定义事件来加深下对事件监听机制的理解
3.1 监听所有事件
我们先创建一个自定义监听器,来监听所有的事件。创建一个Java类,实现ApplicationListener接口在泛型中指定要监听的事件类型即可,如果要监听所有的事件,那么泛型就写ApplicationEvent。
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
最后
即使是面试跳槽,那也是一个学习的过程。只有全面的复习,才能让我们更好的充实自己,武装自己,为自己的面试之路不再坎坷!今天就给大家分享一个Github上全面的Java面试题大全,就是这份面试大全助我拿下大厂Offer,月薪提至30K!
我也是第一时间分享出来给大家,希望可以帮助大家都能去往自己心仪的大厂!为金三银四做准备!
一共有20个知识点专题,分别是:
Dubbo面试专题
JVM面试专题
Java并发面试专题
Kafka面试专题
MongDB面试专题
MyBatis面试专题
MySQL面试专题
Netty面试专题
RabbitMQ面试专题
Redis面试专题
Spring Cloud面试专题
SpringBoot面试专题
zookeeper面试专题
常见面试算法题汇总专题
计算机网络基础专题
设计模式专题
26261)]
常见面试算法题汇总专题
[外链图片转存中…(img-r939pIKw-1710745426262)]
计算机网络基础专题
[外链图片转存中…(img-YX1aoFMB-1710745426262)]
设计模式专题
[外链图片转存中…(img-3S1T0Yt6-1710745426262)]