Spring Boot 应用在启动时,会经历一系列的方法调用和事件发布,这些构成了 Spring Boot 应用的完整生命周期。以下是 Spring Boot 生命周期中的关键步骤、方法和事件,以及它们的作用和示例代码。
生命周期方法和事件
-
SpringApplication.run():- 作用:启动整个 Spring Boot 应用。这个方法会触发应用的初始化和启动过程。
- 示例:
java复制
public static void main(String[] args) { SpringApplication.run(MySpringBootApplication.class, args); }
-
ApplicationStartingEvent:
- 作用:在应用启动开始时发布。此时,只初始化了
SpringApplication,还没有创建ApplicationContext。 - 示例:
java复制
@Component public class ApplicationStartingListener implements ApplicationListener<ApplicationStartingEvent> { @Override public void onApplicationEvent(ApplicationStartingEvent event) { System.out.println("Application is starting"); } }
- 作用:在应用启动开始时发布。此时,只初始化了
-
ApplicationEnvironmentPreparedEvent:
- 作用:在环境准备好时发布,但在创建
ApplicationContext之前。可以用于调整环境属性。 - 示例:
java复制
@Component public class EnvironmentPreparedListener implements ApplicationListener<ApplicationEnvironmentPreparedEvent> { @Override public void onApplicationEvent(ApplicationEnvironmentPreparedEvent event) { System.out.println("Environment is prepared"); } }
- 作用:在环境准备好时发布,但在创建
-
ApplicationContextInitializedEvent:
- 作用:在
ApplicationContext初始化时发布,但在加载任何 bean 定义之前。 - 示例:
java复制
@Component public class ContextInitializedListener implements ApplicationListener<ApplicationContextInitializedEvent> { @Override public void onApplicationEvent(ApplicationContextInitializedEvent event) { System.out.println("ApplicationContext initialized"); } }
- 作用:在
-
ApplicationPreparedEvent:
- 作用:在
ApplicationContext已被创建并加载,但未刷新时发布。此时可以进行最后的修改。 - 示例:
java复制
@Component public class ApplicationPreparedListener implements ApplicationListener<ApplicationPreparedEvent> { @Override public void onApplicationEvent(ApplicationPreparedEvent event) { System.out.println("Application context is prepared"); } }
- 作用:在
-
CommandLineRunner和ApplicationRunner:- 作用:在
ApplicationContext被刷新并启动后调用。用于在应用启动后执行一些逻辑。 - 示例:
java复制
@Component public class MyCommandLineRunner implements CommandLineRunner { @Override public void run(String... args) throws Exception { System.out.println("CommandLineRunner executed"); } }
- 作用:在
-
ApplicationStartedEvent:
- 作用:在
ApplicationContext刷新并启动后立即发送。应用程序已启动,但尚未接收请求。 - 示例:
java复制
@Component public class ApplicationStartedListener implements ApplicationListener<ApplicationStartedEvent> { @Override public void onApplicationEvent(ApplicationStartedEvent event) { System.out.println("Application started"); } }
- 作用:在
-
ApplicationReadyEvent:
- 作用:在应用程序完全启动并准备好接收请求时发布。
- 示例:
java复制
@Component public class ApplicationReadyListener implements ApplicationListener<ApplicationReadyEvent> { @Override public void onApplicationEvent(ApplicationReadyEvent event) { System.out.println("Application is ready to receive requests"); } }
-
ApplicationFailedEvent:
- 作用:在启动过程中遇到异常时发布。用于记录错误或执行失败恢复逻辑。
- 示例:
java复制
@Component public class ApplicationFailedListener implements ApplicationListener<ApplicationFailedEvent> { @Override public void onApplicationEvent(ApplicationFailedEvent event) { System.out.println("Application failed: " + event.getException().getMessage()); } }
详细解释
SpringApplication.run()是启动的入口,触发整个生命周期。- 事件监听器 可以让你在应用程序的不同阶段插入逻辑,比如在环境准备好时调整配置,在应用完全启动后执行初始化任务等。
CommandLineRunner和ApplicationRunner提供了在应用启动结束后立即执行代码的钩子。ApplicationFailedEvent是处理启动失败的重要机制,帮助开发者记录和处理异常。
通过这些方法和事件,Spring Boot 提供了一个灵活的机制来管理应用程序的启动过程,允许开发者在不同的生命周期阶段执行自定义逻辑。
浙公网安备 33010602011771号