大厂面试真题-简单描述一下SpringBoot的启动过程
SpringBoot的启动流程是一个复杂但有序的过程,它涉及多个步骤和组件的协同工作。以下是SpringBoot启动流程的详细解析:
一、启动main方法
当SpringBoot项目启动时,它会在当前工作目录下寻找有@SpringBootApplication注解标识的类,并把这个类作为应用程序的入口点。在这个启动类中,会包含一个main()方法,用于启动整个应用程序。在main()方法中,会创建一个SpringApplication对象,并调用其run()方法来启动应用程序。
二、SpringApplication准备阶段
在SpringApplication对象创建并调用run()方法之前,会进行一些准备工作:
- 读取配置文件:通过类加载器读取
classpath下所有的spring.factories配置文件,创建一些初始配置对象。这些配置对象包括应用程序的初始化器(ApplicationContextInitializer)和监听器(ApplicationListener)。 - 设置主类:通过
deduceMainApplicationClass()方法推断出主方法所在的类,为后续的包扫描和Bean注册做准备。 - 开启计时器:记录应用程序的启动时间,以便在启动完成后打印出启动时长。
三、创建应用程序上下文
接下来,SpringApplication会创建应用程序的上下文(ApplicationContext),这是Spring框架的核心容器,用于管理Bean的生命周期和依赖注入。在创建上下文的过程中,会进行以下操作:
- 准备环境:创建并配置
ConfigurableEnvironment对象,用于读取环境配置,如application.yml或application.properties文件。 - 创建上下文:根据应用类型(如Servlet应用)创建合适的
ApplicationContext实现类,如AnnotationConfigServletWebServerApplicationContext。
四、刷新上下文(启动核心)
刷新上下文是SpringBoot启动流程中的核心步骤,它涉及多个子步骤,包括:
- 配置工厂对象:配置上下文类加载器、对象发布处理器和
BeanFactoryPostProcessor等。 - 注册并实例化Bean:注册并实例化所有自动配置的Bean,以及通过包扫描找到的Bean。同时,会调用
BeanPostProcessor对Bean进行后处理。 - 初始化特殊Bean:初始化一些与上下文有特别关系的Bean对象,如创建Tomcat服务器(对于Web应用)。
- 实例化剩余Bean:实例化所有剩余的Bean对象,并缓存到Bean工厂中。
- 发布通知:通知上下文刷新完成,并启动Tomcat服务器(对于Web应用)。
五、通知监听者并启动程序
在上下文刷新完成后,SpringApplication会通知所有的监听者(ApplicationListener),并调用它们的started()方法。同时,会执行所有实现了CommandLineRunner和ApplicationRunner接口的Bean,以便在应用启动后执行一些特定的代码。
六、应用启动完成
一旦所有的步骤都完成,SpringBoot应用就会处于运行状态,准备好接受请求。此时,计时器会停止,并打印出启动时长。
综上所述,SpringBoot的启动流程是一个涉及多个步骤和组件的复杂过程,但它通过有序地执行这些步骤来确保应用程序能够正确地启动和运行。
相关文章:
大厂面试真题-简单描述一下SpringBoot的启动过程
SpringBoot的启动流程是一个复杂但有序的过程,它涉及多个步骤和组件的协同工作。以下是SpringBoot启动流程的详细解析: 一、启动main方法 当SpringBoot项目启动时,它会在当前工作目录下寻找有SpringBootApplication注解标识的类,…...
4. 硬件实现
博客补充: CUDA C 编程指南学习_c cuda编程-CSDN博客https://blog.csdn.net/qq_62704693/article/details/141225395?spm1001.2014.3001.5501NVIDIA GPU 架构是围绕可扩展的多线程流式多处理器 (SM) 阵列构建的。当主机 CPU 上的 CUDA 程序…...
《操作系统真象还原》第3章 完善MBR【3.1 — 3.2】
目录 引用与说明 3.1、地址、section、vstart 浅尝辄止 1、什么是地址 2、什么是 section【汇编】 3、什么是 vstart【汇编】 3.2、CPU 的实模式 1、CPU 工作原理【重要】 2、实模式下的寄存器 4、实模式下 CPU 内存寻址方式 5、栈到底是什么玩意儿 6 ~ 8 无条件转移…...
八大排序-冒泡排序
在里面找动图理解 【数据结构】八大排序(超详解附动图源码)_数据结构排序-CSDN博客 一 简介 冒泡排序应该是我们最熟悉的排序了,在C语言阶段我们就学习了冒泡排序。 他的思想也非常简单: 两两元素相比,前一个比后一个大就交换࿰…...
基于Spring Boot+Vue的助农销售平台(协同过滤算法、节流算法、支付宝沙盒支付、图形化分析)
🎈系统亮点:协同过滤算法、节流算法、支付宝沙盒支付、图形化分析; 一.系统开发工具与环境搭建 1.系统设计开发工具 后端使用Java编程语言的Spring boot框架 项目架构:B/S架构 运行环境:win10/win11、jdk17 前端&…...
uniapp写抖音小程序阻止右滑返回上一个页面
最近用uniapp写小程序遇到一个问题因为内部用到右滑的业务,但是只要右滑就会回到上一页面,用了event.preventDeafult()没有用,看了文档找到了解决办法 1.在最外层view加上touchstart事件 <view class"container" touchstart&q…...
华为配置手工负载分担模式链路聚合实验
目录 组网需求 配置思路 操作步骤 配置文件 组网图形 图1 配置手工负载分担模式链路聚合组网图 组网需求配置思路操作步骤配置文件 组网需求 如图1所示,AC1和AC2通过以太链路分别都连接VLAN10和VLAN20,且AC1和AC2之间有较大的数据流量。 用户希望A…...
【Spring】Cookie与Session
💐个人主页:初晴~ 📚相关专栏:计算机网络那些事 一、Cookie是什么? Cookie的存在主要是为了解决HTTP协议的无状态性问题,即协议本身无法记住用户之前的操作。 "⽆状态" 的含义指的是: 默认情况…...
chat_gpt回答:qt中,常见格式及格式转换
在Qt中,常见的数据格式包括: QVariant:可以存储多种数据类型,包括整型、浮点型、字符串、布尔值、日期等。QString:用于存储和处理文本字符串。QByteArray:用于处理字节数组,常用于二进制数据。…...
CSS兼容处理
“前端开发兼容——CSS篇” 在前端开发中,CSS样式的兼容性问题常常让开发者感到棘手,尤其是当涉及到IE浏览器时。由于IE浏览器版本繁多,每个版本在CSS支持上还存在差异,这导致开发者在实现统一的视觉效果时,不得不编写…...
制氮机分子筛的材质选择
制氮机分子筛的材质选择对于其性能和效率至关重要。作为制氮设备中的核心部件,分子筛承担着将空气中的氮气与氧气有效分离的重任。以下是对制氮机分子筛常用材质的详细探讨: 制氮机分子筛的主要材质 碳分子筛(CMS) 碳分子筛由活性炭经过特殊工艺加工而成…...
使用Virtual Audio Cable捕获系统音频输出并使用Python处理
一、下载安装Virtual Audio Cable,软件下载地址和安装过程略过。 二、Virtual Audio Cable使用方法Virtual Audio Cable使用笔记一:使用Virtual Audio Cable将播放器的音频流传输到真实声卡驱动中_virtual audio cable control panel-CSDN博客 三、打开…...
微信小程序scroll-view吸顶css样式化表格的表头及iOS上下滑动表头的颜色覆盖及性能分析
微信小程序scroll-view吸顶css样式化表格的表头及iOS上下滑动表头的颜色覆盖及性能分析 目录 微信小程序scroll-view吸顶css样式化表格的表头及iOS上下滑动表头的颜色覆盖及性能分析 1、iOS在scroll-view内部上下滑动吸顶的现象 正常的上下滑动吸顶覆盖: iOS及iPa…...
HDU-1695 GCD
题目大意:已知 1 < x < b , 1 < y < d , 求 gcd ( x , y ) k 的对数。请注意,(x5, y7) 和 (x7, y5) 被认为是相同的。 思路:先将 gcd ( x , y ) k 两边同时…...
unity游戏开发之赛车游戏
在这个 unity 2d 赛车游戏教程中,我将构建一款移动超休闲赛车游戏。 这将是一个简单的 unity 2d 汽车游戏。所以这将需要有一个可以无限滚动的背景。 我们需要避开一些障碍。一些评分系统。 以及一种使用我们的手机加速度计控制我们的汽车的方法。然后,我…...
解决milvus migration 迁移数据到出现数据丢失问题
在迁移数据的时候发现数据丢失 问题是数据在批量迁移的过程中,这个错误会被忽略掉 分析下来是因为buuferSize 设置的是500条数据,但是迁移工具对一次迁移的数据是是有大小限制的,如果500条数据的总大小大于4194304,就会导致数据…...
Python Flask 数据库开发
Python Flask 数据库开发 引言环境配置创建 Flask 应用,连接数据库定义路由定义模型创建表创建 API 数据库直接操作启动 Flask 应用app.py 示例运行 Flask访问应用 展望 引言 在现代 web 开发中,Python 的 Flask 框架因其轻量和灵活性受到广泛欢迎。结合…...
深度学习(七)深度强化学习:融合创新的智能之路(7/10)
一、深度强化学习的崛起 深度强化学习在人工智能领域的重要地位 深度强化学习作为一种融合了深度学习和强化学习的新技术,在人工智能领域占据着至关重要的地位。它结合了深度学习强大的感知能力和强化学习优秀的决策能力,能够处理复杂的任务和环境。例如…...
mac电脑通过 npm 安装 @vue/cli脚手架超时问题;
npm 安装 vue/cli遇到的问题步骤 一、安装 Homebrew 如果你还没有安装 Homebrew,首先需要安装它。Homebrew 是 macOS 上的一款包管理工具,它允许你通过简单的命令行指令安装、更新和卸载软件包。; 1, 打开终端(Terminal…...
【52 机器学习 | 基于KNN近邻和随机森林模型对用户转化进行分析与预测】
文章目录 🏳️🌈 1. 导入模块🏳️🌈 2. Pandas数据处理2.1 读取数据2.2 查看数据信息2.3 字段说明2.4 删除重复值2.5 删除空值 🏳️🌈 3. 数据分析-特征分析3.1 年龄及转化率分析3.2 各营销渠道人数及…...
Obsidian-Templates:卡片盒笔记法的终极模板库,构建你的第二大脑
Obsidian-Templates:卡片盒笔记法的终极模板库,构建你的第二大脑 【免费下载链接】Obsidian-Templates A repository containing templates and scripts for #Obsidian to support the #Zettelkasten method for note-taking. 项目地址: https://gitco…...
别再手动算字模了!用Python+STM32CubeMX快速生成8*8点阵动画,效率提升10倍
用PythonSTM32CubeMX自动化生成8*8点阵动画:从手动编码到智能设计的跨越 每次看到那些闪烁的8*8点阵动画,你是否想过背后的开发者要花多少时间手动计算每个像素的十六进制值?传统开发流程中,工程师需要先在纸上绘制图案࿰…...
BFD与NQA:网络故障检测与性能分析的协同之道
1. BFD与NQA:网络运维的双子星 刚入行做网络运维那会儿,最怕半夜接到告警电话。记得有次凌晨三点,核心交换机突然丢包,传统Ping检测像老牛拉车,等定位到光纤模块故障时,业务已经中断了17分钟。直到后来用上…...
X-TRACK GPS自行车码表:从硬件选型到系统集成的工程决策与验证
X-TRACK GPS自行车码表:从硬件选型到系统集成的工程决策与验证 【免费下载链接】X-TRACK A GPS bicycle speedometer that supports offline maps and track recording 项目地址: https://gitcode.com/gh_mirrors/xt/X-TRACK 在嵌入式设备开发领域ÿ…...
Apache SeaTunnel 4 月有何新动作?连接器增强与 Zeta 稳定性提升等亮点速览
在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...
你的手机变砖前兆?聊聊Android救援模式(Rescue Mode)的5次机会与触发逻辑
你的手机变砖前兆?聊聊Android救援模式(Rescue Mode)的5次机会与触发逻辑 最近有位朋友在群里吐槽:"新装的购物App让手机卡成幻灯片,重启三次都没用,最后居然弹窗问我要不要恢复出厂设置?"这其实是触发了And…...
别再纠结剪胀角了!用Abaqus CAE五分钟搞定库伦摩尔模型的材料卡设置(含黏土/砂土参数模板)
别再纠结剪胀角了!用Abaqus CAE五分钟搞定库伦摩尔模型的材料卡设置(含黏土/砂土参数模板) 岩土工程仿真中,材料参数设置往往是新手的第一道门槛。当你在Abaqus中面对十几个输入框时,是否也曾困惑:摩擦角和…...
FPGA与CPLD在数字机顶盒中的关键技术应用
1. 可编程逻辑器件在数字机顶盒中的核心价值 数字机顶盒作为连接广播网络与终端显示设备的关键枢纽,其设计面临三大核心挑战:多标准兼容性、快速功能迭代和成本控制。Xilinx Spartan系列FPGA和CoolRunner CPLD通过硬件可重构特性,为这些挑战提…...
NRF52833开发实战:从零构建Keil工程与一键烧录
1. 环境搭建:从零准备NRF52833开发工具链 第一次接触NRF52833开发时,最头疼的就是环境配置。记得我刚开始用Keil调试蓝牙项目时,光是找齐所有安装包就花了整整两天。现在把完整工具链的获取方式和避坑要点整理给你,新手照着做半小…...
从HIDL到HAL3:手把手拆解Android相机Provider进程的通信与数据流转
Android相机架构深度解析:从HIDL到HAL3的数据流转与性能优化 在移动影像技术快速迭代的今天,Android相机系统的架构设计直接影响着成像质量与用户体验。作为连接应用层与硬件层的核心枢纽,Camera Provider进程通过HIDL接口与Camera Service通…...
