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

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

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

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

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

1.获取监听器

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

【SpringBoot】面试必杀技-泰山陨石坠,SpringBoot中主启动类的run方法启动流程是什么?_第2张图片
【SpringBoot】面试必杀技-泰山陨石坠,SpringBoot中主启动类的run方法启动流程是什么?_第3张图片
拿到spring.factories文件中key为org.springframework.boot.SpringApplicationRunListener的value值

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

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

反射拿到实例对象

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

启动监听器

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

2.构建应用上下文环境

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

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

其中有jvm的值

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

有电脑的环境变量

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

有配置文件里面的值

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

3.初始化应用上下文

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

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

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

4.交给spring前的准备工作

我来鹅城只做两件事

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

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

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

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

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

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

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

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

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

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

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

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

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

postProcessBeanDefinitionRegistry()方法

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

processConfigBeanDefinitions()方法

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

处理@Configuration注解的相关逻辑

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

parse()方法

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

doProcessConfigurationClass方法

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

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

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

解析@ComponentScan

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

又进入parse方法

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

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

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

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

所以获取的值为空

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

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

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

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

doscan方法将testcontroller注册到ioc中

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

解析@Import

org.springframework.context.annotation.ConfigurationClassParser#processImports

在这里插入图片描述

getimport获取import值

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

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

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

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

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

processGroupImports方法

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

getImports方法

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

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

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

getAutoConfigurationEntry方法

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

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

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

org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader#loadBeanDefinitions

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

你可能感兴趣的:(面试,java,spring,boot)