【SpringBoot】面试必杀技-泰山陨石坠,SpringBoot中主启动类的run方法启动流程是什么?

news2024/9/23 1:26:58

开头导语由Chatgpt完成
当今互联网行业中,Java后端开发岗位的竞争异常激烈,对于面试者来说,掌握一些技巧和知识点将有助于脱颖而出。而对于SpringBoot框架的使用和运行机制,更是Java后端开发岗位中不可或缺的技能点之一。在SpringBoot中,主启动类是整个应用程序的入口,其run方法的启动流程是每个面试官都会问到的问题。本文将为大家介绍SpringBoot中主启动类的run方法启动流程,帮助读者在面试中掌握这一必杀技——泰山陨石坠。

其中run方法中一共有六个子方法

      • 😄1.获取监听器
      • 😆2.构建应用上下文环境
      • 😊3.初始化应用上下文
      • 😃4.交给spring前的准备工作
        • 我来鹅城只做两件事
      • 😏5.将应用上下文交给spring,使其初始化bean
      • 😍6.刷新应用上下文之后的操作

在这里插入图片描述

😄1.获取监听器

事件机制在Spring是很重要的一部分内容,通过事件机制我们可以监听Spring容器中正在发生的一些事件,同样也可以自定义监听事件。Spring的事件为Bean和Bean之间的消息传递提供支持。当一个对处理完某种任务后,通过另外的对象进行某些处理,常用的场景有进行某些操作后发送通知,消息、邮件等情况。

在这里插入图片描述
在这里插入图片描述
拿到spring.factories文件中key为org.springframework.boot.SpringApplicationRunListener的value值

例如:org.springframework.boot.context.event.EventPublishingRunListener

在这里插入图片描述

反射拿到实例对象

在这里插入图片描述

启动监听器

在这里插入图片描述

😆2.构建应用上下文环境

这一步的目的就是将系统所有的变量值加入到环境中方便springboot之后调用

在这里插入图片描述

其中有jvm的值

在这里插入图片描述

有电脑的环境变量

在这里插入图片描述

有配置文件里面的值

在这里插入图片描述
在这里插入图片描述

😊3.初始化应用上下文

在这里插入图片描述

这一步创建了应用上下文也创建了ioc容器org.springframework.beans.factory.support.DefaultListableBeanFactory

在这里插入图片描述

😃4.交给spring前的准备工作

我来鹅城只做两件事

第一件事,完成属性的赋值,将环境变量赋值给应用上下文

在这里插入图片描述

第二件事,完成启动类bean的创建

在这里插入图片描述
在这里插入图片描述

可以看到执行prepareContext方法之后启动类已经在ioc容器中了

在这里插入图片描述

😏5.将应用上下文交给spring,使其初始化bean

在这里插入图片描述

到这里就是spring要完成的事情了

在这里插入图片描述

这个方法就是springboot能完成自动装配的核心方法,能够使得启动类上面的注解生效。

invokeBeanFactoryPostProcessors()方法就是这里面最重要的一个方法

在这里插入图片描述

postProcessBeanDefinitionRegistry()方法

在这里插入图片描述

processConfigBeanDefinitions()方法

在这里插入图片描述

处理@Configuration注解的相关逻辑

在这里插入图片描述

parse()方法

在这里插入图片描述

doProcessConfigurationClass方法

在这里插入图片描述

这里就是使得启动类注解生效的地方!

在这里插入图片描述

解析@ComponentScan

在这里插入图片描述

又进入parse方法

在这里插入图片描述

注意,这里就是springboot为什么会扫描启动类所在包目录下所有的bean的核心方法

因为我们的启动类注解没有配置basepackages

在这里插入图片描述

所以获取的值为空

在这里插入图片描述

所有默认为启动类所在包目录!

在这里插入图片描述

在这里插入图片描述

doscan方法将testcontroller注册到ioc中

在这里插入图片描述在这里插入图片描述

解析@Import

org.springframework.context.annotation.ConfigurationClassParser#processImports

在这里插入图片描述

getimport获取import值

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

拿到了这两个类下面我们要去调用这两个类里面的方法

在this.deferredImportSelectorHandler.process()中去执行这两个类(自动配置入口)

在这里插入图片描述

processGroupImports方法

在这里插入图片描述
在这里插入图片描述

getImports方法

在这里插入图片描述

会执行内部类里面的process方法

在这里插入图片描述

getAutoConfigurationEntry方法

在这里插入图片描述

又回到了springboot自动装配的地方,建议结合上一篇内容查看

【SpringBoot】面试组合技-天羽屠龙舞,SpringBootApplication注解的作用是什么?SpringBoot怎么实现自动装配的?

org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader#loadBeanDefinitions

真正注册到ioc中还是this.reader.loadBeanDefinitions(configClasses)方法

在这里插入图片描述

这个时候我们看ioc中只有8个对象

在这里插入图片描述

执行完成就变成了125个对象了

在这里插入图片描述

这个时候已经初始化完成了,invokeBeanFactoryPostProcessors方法使命完成

接下来就等finishBeanFactoryInitialization方法实例化bean对象到一级缓存当中去,建议配合上一篇博客spring源码观看

面试组合技-月色血风暴,什么是Spring中的循环依赖?怎么解决循环依赖?

在这里插入图片描述

😍6.刷新应用上下文之后的操作

在这里插入图片描述

空实现,模板方法,供我们自己重写

在这里插入图片描述

chatgpt完成总结语
在这篇博客中,我们详细介绍了SpringBoot中主启动类的run方法启动流程,通过对整个启动过程的深入分析,读者可以更加清晰地了解SpringBoot的工作原理和应用场景。帮助读者更好地掌握这一必杀技,以应对日益激烈的Java后端开发岗位竞争。
总的来说,SpringBoot是一个非常强大的框架,它为Java后端开发带来了许多便利和效率提升。学习SpringBoot的过程可能会有一些困难和挑战,但只要我们勇于面对和克服,就一定能够在这个领域中获得成功。希望这篇博客对读者有所帮助,让你在学习SpringBoot的路上更加顺畅和愉快!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/440290.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python里的元组、列表和字典区别

列表:可更改、有序、可重复、元素可以是任何对象 列表示例:[1,a,[2,3]] 元组:不可更改、有序、可重复、元素可以是任何对象 元组示例:(b,1,[2,3]) 字典:可更改、无序、键不可重复、键不可变、值可以是任何对象&…

【Redis-面试题及持久化方案】Redis相关面试题(缓存穿透、缓存击穿、缓存雪崩) Redis两种持久化方案详情对比(RDB、AOF)

【Redis-面试题及持久化方案】Redis相关面试题(缓存穿透、缓存击穿、缓存雪崩) & Redis两种持久化方案详情对比(RDB、AOF) 1)Redis 面试题1.1.高频面试题:缓存穿透、缓存击穿、缓存雪崩1.2.低频面试题&…

校友小程序定制开发 带我们回到那个学生时代

学生时代总是给人一种单纯美好的感觉,也会是每个人记忆深处最深刻的回忆,尤其是一起学习生活几年的同窗随着毕业不得不各奔东西,但是大家都对母校有着不一样的情怀,也想有一个什么东西能够把各个高校校友联系在一起。校友小程序开…

瑞芯微 Rockchip rknn 模型在线预编译

瑞芯微 Rockchip rknn 模型在线预编译 flyfish 主机Host环境 Distributor ID: Ubuntu Description: Ubuntu 22.04.2 LTS Release: 22.04 Codename: jammy开发板Target环境 RV1126一 主机连接开发板 用线连起来后,查看usb信息 没权限的提示 no permissions (…

微信小程序笔记(1)

小程序笔记 小程序一个页面为什么有四个文件? [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZVdz4I1W-1681982063887)(C:\Users\26387\AppData\Roaming\Typora\typora-user-images\image-20230419170019877.png)] wxss:写页…

对学历贬值的再观察

最近在求职市场上观察到这样一个现象,有些4年前硕士学历就能进入的职业,现在都要博士了,不免让人有一种4年书白读的感觉。所以想再观察一下学历贬值,平复一下心情(不是)。 学历贬值的原因:供大于…

day1 Flappy bird项目介绍

项目介绍 功能分析: 1、按下空格小鸟上升,不按下落; 2、搭建小鸟需要穿过的管道; 3、管道自动左移和创建; 4、小鸟触碰到管道游戏结束; 知识储备: 1、C语言; 2、数据结构 -…

【Vue2源码】响应式原理

【Vue2源码】响应式原理 文章目录 【Vue2源码】响应式原理Vue响应式的核心设计思路整体流程响应式中的关键角色检测变化注意事项响应式原理数据观测重写数组7个变异方法增加__ob__属性__ob__有两大用处: Vue.js 基本上遵循 MVVM(Model–View–ViewModel&…

[oeasy]python0135_变量名与下划线_dunder_声明与赋值

变量定义 回忆上次内容 变量 就是 能变的量上次研究了 变量标识符的 规则 第一个字符 应该是 字母或下划线合法的标识符可以包括 大小写字母数字下划线 还研究了字符串(str)的函数 isidentifier查询字符串 是否为合法标识符 最后发现 这个isidentifier函数有时候不好使&…

实战iOS App 重签名

熟悉iOS开发的同学都知道,iOS应用的上架流程主要分为以下几步: 创建开发者账号借助辅助工具appuploader创建证书,描述文件iTunes connect创建App打包IPA上传App Store等待审核在签名的流程中,有一个App重签名的步骤,主要针对的是一些大公司有多个App的情况,多个App一个申…

Linux设备驱动开发 - S3C2440时钟分析

By: fulinux E-mail: fulinuxsina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 系统框架图FLCK,HCLK,PCLK时钟源的选择 时钟体系流程流程分析驱动中的clk 系统框架图 2440是一个SOC(system on …

【网络编程】网络编程 和 Socket 套接字认识

✨个人主页:bit me👇 ✨当前专栏:Java EE初阶👇 目 录 🎧一. 网络编程基础🎺1. 为什么需要网络编程?🎷2. 什么是网络编程🎸3. 网络编程中的基础概念 🎿二. So…

继续学习Easyx

画圆角矩形函数:roundrect,前四个参数是和矩形一样的,表示先画一个矩形,然后就是要画它的圆角了,要怎么画它的圆角?这里使用四个一样的椭圆来将它的四个角画出来,而在这个里面的椭圆不再需要四个…

MySQL8.0.33主从复制配置记录

目录 1. 下载2. 解压3.重命名4.创建存储数据文件5. 设置用户组并赋权6. 初始化MySQL7.配置文件8. 启动MySQL9. 设置软连接,并重启MySQL10. 登录并更改密码11. 开放远程连接12. 连接工具测试连接MySQL13. 开机自启配置14.从服务器配置15. 主库配置16. 从库配置17. 测…

功率MOS管烧毁,有这些原因

功率MOS管烧毁的原因以及相应的预防措施。在本文中,我将会介绍功率MOS管的基本结构、工作原理,以及可能导致功率MOS管烧毁的原因,并提供相应的解决方案。 1. 功率MOS管的基本结构和工作原理 功率MOS管是一种常用的功率电子器件,…

SpringBoot集成MyBatis-plus

SpringBoot集成MyBatis-plus 一、Mybatis-Plus简介1.简介2.特性3.官网及文档地址 二、入门案例1.开发环境2.创建数据库及表3.创建Springboot项目导入依赖4.配置application.yml5.启动类6.实体类7.添加mapper8.添加UserController9.日志配置 三、CURD1.BaseMapper2.通用Service …

事件主循环

一、事件主循环 1、事件处理主流程 libevent的事件循环主要是通过event_base_loop函数来完成,其主要的操作如下: 1、根据timer-heap中的事件最小超时时间,计算系统I/O demultiplexer的最大等待时间。例如:当底层使用的是Linux提供…

Android系统启动流程--system_server进程的启动流程

紧接上一篇zygote进程的启动流程,上一篇的结尾提到zygote进程中会fock出一个system_server进程,用于启动和管理Android系统中大部分的系统服务,本篇就来分析system_server进程是如何创建并运行的以及它都做了哪些重要的工作。 //文件路径&am…

Show, Attend, and Tell | a PyTorch Tutorial to Image Captioning代码调试(跑通)

Show, Attend, and Tell | a PyTorch Tutorial to Image Captioning代码调试(跑通) 文章目录 Show, Attend, and Tell | a PyTorch Tutorial to Image Captioning代码调试(跑通)前言1. 创建、安装所用的包1.1 创建环境&#xff0c…

【深度学习】OCR文本识别

OCR文字识别定义 OCR(optical character recognition)文字识别是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,然后用字符识别方法将形状翻译成计算机文字的过程;即,对文本资料进行扫描…