锋盈数科-知识库 Logo
首页
软件开发
计算机基础
Hello Halo
新手必读
关于本知识库
登录 →
锋盈数科-知识库 Logo
首页 软件开发 计算机基础 Hello Halo 新手必读 关于本知识库
登录
  1. 首页
  2. 软件开发
  3. JAVA
  4. 深入理解Spring Boot生命周期

深入理解Spring Boot生命周期

0
  • JAVA
  • 发布于 2024-08-15
  • 0 次阅读
黄健
黄健

本文由 简悦 SimpRead 转码, 原文地址 blog.csdn.net

引言

Spring Boot 作为一个用来简化 Spring 应用初始化与部署的框架,它的生命周期是每个 Spring 开发者必须理解的核心概念。本文将深入探讨 Spring Boot 的生命周期,从启动到销毁的全过程,帮助开发者更加精准地控制和优化自己的 Spring Boot 应用。

Spring Boot 生命周期概览

Spring Boot 的生命周期大致可以分为以下几个阶段:

  • 初始化环境
  • 创建ApplicationContext
  • 准备上下文环境
  • 加载ApplicationContext
  • 刷新上下文
  • 运行 Spring 应用
  • 应用关闭

下面,我们将逐一解析每个阶段的细节。

1. 初始化环境

1.1 SpringApplication 实例化

一切都始于SpringApplication类的实例化。这个实例化过程负责准备并启动 Spring 应用。

1.2 参数解析

命令行参数被解析,并传递给SpringApplication实例。这些参数可以决定一些关键行为,例如是否启用 web 环境,以及应用的运行监听器。

1.3 Banner 加载

Spring Boot 在项目启动时默认会展示一个 banner。它在此阶段加载,并打印在控制台。

2. 创建ApplicationContext

ApplicationContext是 Spring 容器,负责管理应用的 Bean 生命周期。Spring Boot 根据应用类型(web 应用或非 web 应用)来创建不同类型的上下文(例如AnnotationConfigApplicationContext或AnnotationConfigServletWebServerApplicationContext)。

3. 准备上下文环境

3.1 加载配置文件

Spring Boot 会加载应用的配置文件,如application.properties或application.yml,以及其他自定义配置。

3.2 设置环境变量

环境变量及配置被加载到 Spring 环境中。开发者可以通过实现EnvironmentPostProcessor接口来自定义环境准备的过程。

4. 加载ApplicationContext

4.1 注册 Bean

随着ApplicationContext的创建,Spring Boot 开始注册所有必需的 Bean。这包括配置类、组件、服务等。

4.2 Bean 定义加载

Spring Boot 扫描项目中的注解,解析@Component、@Service、@Repository等注解,以及通过@Import导入的配置。

5. 刷新上下文

5.1 Bean 生命周期处理

各种 BeanPostProcessors 被初始化,Bean 的生命周期(如@PostConstruct和@PreDestroy)开始被管理。

5.2 事件发布

Spring Boot 通过 ApplicationEventMulticaster 发布各种事件,如ContextRefreshedEvent。

5.3 Web 服务器初始化

如果是 web 应用,内嵌的 web 服务器(如 Tomcat、Jetty 或 Undertow)会在这一阶段初始化。

5.4 Servlet 和 Filter 注册

Web 应用的 Servlets 和 Filters 被注册。

6. 运行 Spring 应用

6.1 命令行运行器执行

CommandLineRunner和ApplicationRunner接口可以用来执行 Spring 容器加载完毕后的运行逻辑。

6.2 应用准备完成

ApplicationReadyEvent被发布,表示应用已经准备好接受请求。

7. 应用关闭

7.1 上下文关闭

容器接收到关闭信号,ApplicationContext开始关闭流程。

7.2 Bean 销毁

标有@PreDestroy注解的方法被调用,Singleton Bean 被销毁。

7.3 应用关闭事件

最后,ApplicationClosedEvent事件被发布,标志着应用生命周期的结束。

 深入理解生命周期

理解生命周期的每个阶段,对于处理自动配置、自定义 Bean 初始化逻辑、管理应用配置、以及优化应用启动时间都至关重要。

例如,在ApplicationContext初始化阶段,开发者可以通过定义ApplicationContextInitializer对上下文进行进一步的定制。又或者,在 Bean 加载阶段,通过实现BeanFactoryPostProcessor修改 Bean 定义。

对于性能优化,了解在ApplicationContext刷新阶段,哪些操作是耗时的,并通过懒加载 Bean、条件配置等手段进行优化,是提高启动速度的关键。

结语

Spring Boot 生命周期的理解并不是一朝一夕能完成的。它要求开发者不断实践、探索和学习。通过深入了解各个生命周期阶段,开发者可以更加精准地控制应用的行为,提高开发效率,并确保应用稳定可靠地运行。

本文只是对 Spring Boot 生命周期的一个初步介绍,但希望它能作为一个起点,帮助你开始在实践中更深入地理解和应用这些概念,从而构建更加强大和优雅的 Spring Boot 应用。

标签: #软件开发 1171 #JAVA 991
相关文章

Spring 实现 3 种异步接口 2024-10-18 09:07

大家好,我是苏三~ 如何处理比较耗时的接口? 这题我熟,直接上异步接口,使用 Callable、WebAsyncTask 和 DeferredResult、CompletableFuture等均可实现。 但这些方法有局限性,处理结果仅返回单个值。在某些场景下,如果需要接口异步处理的同时,还持续不断地

重学SpringBoot3-集成Redis(五)之布隆过滤器 2024-10-08 11:24

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Redis(五)之布隆过滤器 1. 什么是布隆过滤器? * 基本概念 适用场景 2. 使用 Redis 实现布隆过滤器 * 项目依赖 Redis 配置

SpringBoot整合异步任务执行 2024-10-08 11:24

同步任务: 同步任务是在单线程中按顺序执行,每次只有一个任务在执行,不会引发线程安全和数据一致性等 并发问题 同步任务需要等待任务执行完成后才能执行下一个任务,无法同时处理多个任务,响应慢,影响用 户体验 异步任务: 异步任务是在多线程中同时执行,多个任务可以并发执行,同时处理多个请求,响应快,资源

springboot kafka多数据源,通过配置动态加载发送者和消费者 2024-10-08 11:24

前言 最近做项目,需要支持kafka多数据源,实际上我们也可以通过代码固定写死多套kafka集群逻辑,但是如果需要不修改代码扩展呢,因为kafka本身不处理额外逻辑,只是起到削峰,和数据的传递,那么就需要对架构做一定的设计了。 准备test kafka本身非常容易上手,如果我们需要单元测试,引入ja

SpringBoot 集成 Redis 2024-10-08 11:24

一:SpringBoot 集成 Redis ①Redis是一个 NoSQL(not only)数据库, 常作用缓存 Cache 使用。 ②Redis是一个中间件、是一个独立的服务器;常用的数据类型: string , hash ,set ,zset , list ③通过Redis客户端可以使用多种语

SpringBoot整合QQ邮箱 2024-10-08 11:24

SpringBoot可以通过导入依赖的方式集成多种技术,这当然少不了我们常用的邮箱,现在本章演示SpringBoot整合QQ邮箱发送邮件…. 下面按步骤进行: 1.获取QQ邮箱授权码 1.1 登录QQ邮箱 1.2 开启SMTP服务 找到下图中的SMTP服务区域,如果当前账号未开启的话自己手动开启。

目录

IT 外包服务商

  • 意见投递
  • zyf6619

软件开发应用

主菜单

  • 首页
  • 软件开发
  • 计算机基础
  • Hello Halo
  • 新手必读
  • 关于本知识库
Copyright © 2024 your company All Rights Reserved. Powered by Halo.