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

2023-05-16

开头导语由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的路上更加顺畅和愉快!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐