【springboot系列】springboot的启动原理,springboot应用是如何启动的

news/2024/11/13 5:34:55/

springboot系列】springboot的启动原理,springboot应用是如何启动的

Spring Boot的启动原理是一个复杂而精妙的流程,它负责加载配置、初始化应用上下文、自动配置和启动内嵌服务器等任务。以下是Spring Boot启动原理的详细解释:

1. 加载主类与配置文件

  • 加载主类:Spring Boot应用的启动从一个包含main()方法的主类开始。这个主类通常使用@SpringBootApplication注解标记,它是一个组合注解,包含了@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan
  • 加载配置文件:当Spring Boot项目启动时,会首先读取项目中的配置文件,主要是application.ymlapplication.properties文件。这些配置文件会指定项目的启动端口号、数据库连接等一系列配置信息。

2. 初始化SpringApplication

  • 在主类中调用SpringApplication.run()方法时,会创建一个SpringApplication对象。这个对象负责管理Spring应用的启动和初始化。
  • SpringApplication对象会设置一些基础属性,比如是否应该添加命令行属性,是否需要横幅(Banner)等。

3. 环境准备

  • 读取环境配置:在创建应用上下文之前,先准备环境(Environment),这包括配置文件、命令行参数、环境变量等的解析。
  • 确定Web服务类型SpringApplication会根据类路径中存在的类来推断当前应用的Web环境类型(如Servlet、Reactive或None)。

4. 创建应用上下文

  • 根据选择的Web环境类型,Spring Boot会设置合适的应用上下文(ApplicationContext)。对于Web应用,通常是AnnotationConfigServletWebServerApplicationContext;对于非Web应用,则是AnnotationConfigApplicationContext

5. 加载Bean定义

  • 通过扫描类路径中的组件和配置类(由@ComponentScan@Configuration等注解指定)来加载Bean定义。
  • @EnableAutoConfiguration注解激活了自动配置的魔法,它告诉Spring Boot基于添加到项目中的jar依赖,尝试去猜测并配置你可能需要的Bean。自动配置类会在应用上下文中被条件化地执行。

6. 实例化Bean

  • 在所有的配置类和组件被加载之后,Spring容器会根据需要创建和配置Bean实例。这些Bean可能是由Spring Boot提供的自动配置,也可能是开发者自定义的Bean。

7. 刷新应用上下文

  • 完成所有配置后,应用上下文会被刷新,此时所有的Bean都已注册完毕,且已准备就绪。

8. 启动内嵌服务器

  • 如果Spring Boot应用是一个Web应用,并且配置了内嵌服务器(如Tomcat、Jetty或Undertow),则此时会启动这些服务器,并注册Spring容器到Web容器中,使得应用可以直接以Web应用程序的形式运行。

9. 触发应用就绪事件

  • 最后,一个ApplicationReadyEvent被发布,表明应用已完全启动并准备好接收请求。

10. 启动命令行运行器

  • 如果应用中包含CommandLineRunnerApplicationRunner Bean,它们会在此时执行。

通过以上步骤,Spring Boot实现了其高效且简洁的启动机制,极大地简化了基于Spring的应用开发和服务部署。开发者只需关注业务逻辑和所需依赖,即可快速构建出可运行的应用程序。


http://www.ppmy.cn/news/1515810.html

相关文章

一文入门:正则表达式基础

正则表达式简介 正则表达式(Regular Expression,简称regex或RE)是一种用于匹配字符串中字符组合的模式。它广泛应用于编程语言、文本编辑器和各种工具中,用于执行复杂的字符串搜索和替换任务。 为什么使用正则表达式&#xff1f…

G1处理器GC调优常用参数详解

mixGC触发机制: G1 垃圾收集器在执行垃圾收集时,会根据不同的情况选择不同的垃圾收集策略,其中 "Mixed GC" 是一种比较复杂的策略,用于回收整个堆内存中的垃圾。 G1 垃圾收集器执行 Mixed GC 的时机通常取决于以下几个…

GUI编程01:第一个Frame窗口

本节内容视频链接:3、第一个Frame窗口_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1DJ411B75F?p3&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 1.GUI编程中用到的类 2.我的第一个Frame窗口代码 package com.yundait.www;import java.awt.*;public …

iOS 17.6.1版本重发,修复高级数据保护错误

今日,苹果没有带来iOS 17.6.2的更新,而是重新发布了iOS 17.6.1版本,本次升级版本号为21G101,高于第一版的21G93。距离初版发布相隔一周半时间。 在 iOS / iPadOS 17.6.1 的更新日志,苹果公司写道:“此更新包…

如何在分布式环境中实现高可靠性分布式锁

目录 一、简单了解分布式锁 (一)分布式锁:应对分布式环境的同步挑战 (二)分布式锁的实现方式 (三)分布式锁的使用场景 (四)分布式锁需满足的特点 二、Redis 实现分…

最近云计算领域有哪些重大进展?

在云计算领域,近期确实涌现出了一系列令人瞩目的重大进展。以下是一些关键点,为您概述了当前的科技动态: 中国云计算市场迅猛发展: 中国云计算市场正处于快速发展期,年复合增长率超过40%。公有云市场规模增长49.3%至32…

CISAW安全集成和别的类型有什么区别

信息安全人员认证(Certified Information Security Assurance Worker, CISAW)是由中国网络安全审查技术认证中心依据信息安全领域的不同专业、技术和应用方向以及安全岗位需求,按照ISO/IEC 17024标准建立的多层次认证体系。 CISAW分为三个主…

Win/Linux/Mac 安装Python 3.6

一.Win 1.下载Python 3.6 Windows 版本 方法一(访问速度慢): 官网地址 方法二(推荐): 各个Python版本下载 国内下载镜像1 国内下载镜像2 2.安装时注意选择" Add Python 3.6 to PATH "&…