序号 事件类型 触发时机 核心作用 是否可修改容器 |
1 | ApplicationStartingEvent | SpringApplication.run() 执行后立即触发 | 最早介入点,注册自定义监听器 | ❌ |
2 | BootstrapContextInitializedEvent | 引导上下文(BootstrapContext)初始化后 | 配置加密/密钥管理的最佳时机 | ❌ |
3 | ApplicationEnvironmentPreparedEvent | 环境对象(Environment)准备完成,但尚未加载配置文件 | 动态修改配置的最后机会(如:添加 PropertySource) | ✅ |
4 | ApplicationContextInitializedEvent | ApplicationContext 初始化完成,但尚未加载 Bean定义 | 执行早期容器定制(如设置活动 profiles) | ✅ |
5 | ApplicationPreparedEvent | Bean 定义加载完成,但实例化之前 | 最后修改 Bean 定义的机会(添加自定义 BeanPostProcessor) | ✅ |
6 | ContextRefreshedEvent | 上下文完全刷新后触发(Spring Framework 原生事件) | 执行需要完整上下文的操作 | ⚠️ 风险操作 |
7 | WebServerInitializedEvent | 内嵌 Web 服务器(Tomcat/Jetty)启动完成 | 获取服务器端口等运行时信息 | ❌ |
8 | ApplicationStartedEvent | 上下文已刷新,但未触发 ApplicationRunner | 资源预热准备(如缓存加载) | ⚠️ 只读访问 |
9 | AvailabilityChangeEvent (Liveness) | 应用进入活动状态(LivenessState.CORRECT) | Kubernetes 存活探针准备 | ❌ |
10 | ApplicationReadyEvent | 所有 ApplicationRunner 执行完毕 | 业务初始化安全点(可安全访问服务) | ⚠️ 只读访问 |
11 | AvailabilityChangeEvent (Readiness) | 应用就绪可接收流量(ReadinessState.ACCEPTING_TRAFFIC) | Kubernetes 就绪探针触发 | ❌ |
12 | ApplicationFailedEvent | 启动过程任何阶段失败时触发 | 失败处理(如发送告警、记录诊断日志) | ❌ |