当前位置:首页 > 经验 >

springboot启动原理面试(spring boot自动启动原理面试)

来源:原点资讯(www.yd166.com)时间:2022-11-01 14:22:24作者:YD166手机阅读>>

springboot启动原理面试,spring boot自动启动原理面试(1)

SpringBoot的启动流程

不管是用springboot开发还是面试,都需要对SpringBoot的启动流程所了解。

下面是一个标准的springboot程序

springboot启动原理面试,spring boot自动启动原理面试(2)

springboot程序

启动程序执行SpringApplication.run方法,我们先看看run方法导致干了什么?,到现在还是很简单,就创建了一个Springpplication实例并执行run方法。

springboot启动原理面试,spring boot自动启动原理面试(3)

Springpplication实例

实例化SpringApplication时做了什么?

SpringApplication的构造方法,其中做了几件事情

  • 推断WebApplicationType,主要思想就是在当前的classpath下搜索特定的类
  • 搜索META-INF\spring.factories文件配置的ApplicationContextInitializer的实现类
  • 搜索META-INF\spring.factories文件配置的ApplicationListenerr的实现类
  • 推断MainApplication的Class

springboot启动原理面试,spring boot自动启动原理面试(4)

springApplication构造方法

SpringApplication的run方法做了什么?

下看一下run方法的代码,代码不多,做的事情很多。

springboot启动原理面试,spring boot自动启动原理面试(5)

SpringApplication的run方法

  1. 创建一个StopWatch并执行start方法,这个类主要记录任务的执行时间
  2. 配置Headless属性,Headless模式是在缺少显示屏、键盘或者鼠标时候的系统配置
  3. 在文件META-INF\spring.factories中获取SpringApplicationRunListener接口的实现类EventPublishingRunListener,主要发布SpringApplicationEvent
  4. 把输入参数转成DefaultApplicationArguments类
  5. 创建Environment并设置比如环境信息,系统熟悉,输入参数和profile信息
  6. 打印Banner信息
  7. 创建Application的上下文,根据WebApplicationTyp来创建Context类,如果非web项目则创建AnnotationConfigApplicationContext,在构造方法中初始化AnnotatedBeanDefinitionReader和ClassPathBeanDefinitionScanner
  8. 在文件META-INF\spring.factories中获取SpringBootExceptionReporter接口的实现类FailureAnalyzers
  9. 准备application的上下文
    1. 初始化ApplicationContextInitializer
    2. 执行Initializer的contextPrepared方法,发布ApplicationContextInitializedEvent事件
    3. 如果延迟加载,在上下文添加处理器LazyInitializationBeanFactoryPostProcessor
    4. 执行加载方法,BeanDefinitionLoader.load方法,主要初始化了AnnotatedGenericBeanDefinition
    5. 执行Initializer的contextLoaded方法,发布ApplicationContextInitializedEvent事件
  10. 刷新上下文(后文会单独分析refresh方法),在这里真正加载bean到容器中。如果是web容器,会在onRefresh方法中创建一个Server并启动。

springboot启动原理面试,spring boot自动启动原理面试(6)

刷新上下文

回到run方法,最后的逻辑就是发布启动完成的事件,并调用监听者的方法。

栏目热文

java中bean的生命周期(怎么理解java中的bean)

java中bean的生命周期(怎么理解java中的bean)

Spring作为当前Java最流行、最强大的轻量级框架,受到了程序员的热烈欢迎。准确的了解Spring Bean的生命周...

2022-11-01 14:23:53查看全文 >>

类加载的5个过程详解(类加载器和双亲委派机制)

类加载的5个过程详解(类加载器和双亲委派机制)

# 类加载过程加载, 验证, 准备, 解析, 初始化下面依次说说...

2022-11-01 14:04:06查看全文 >>

...

1970-01-01 08:00:00查看全文 >>

springboot三大核心原理(spring boot核心技术笔记)

springboot三大核心原理(spring boot核心技术笔记)

Spring Boot核心原理通过上篇的学习,读者应该对Spring Boot有了一个大致的认识,利用Spring Bo...

2022-11-01 13:55:26查看全文 >>

springbean生命周期(spring三大核心原理)

springbean生命周期(spring三大核心原理)

1.Bean生命周期简单概述 2.BeanPostProcessor作用 3.BeanPostProcessor实现增强...

2022-11-01 13:49:32查看全文 >>

spring注入bean的方法(spring注入有状态的bean)

spring注入bean的方法(spring注入有状态的bean)

来源:blog.csdn.net/weixin_43741092/article/details/120176466将b...

2022-11-01 14:05:30查看全文 >>

bean的基本知识(bean注解的使用方法)

bean的基本知识(bean注解的使用方法)

一、Bean的基础知识1.在xml配置文件中,bean的标识(id 和 name) id:指定在benafactory中...

2022-11-01 13:48:16查看全文 >>

spring bean生命周期面试题(简述spring bean生命周期)

spring bean生命周期面试题(简述spring bean生命周期)

今天阿粉给大家带来的是关于Spring的另外的一道高频面试题,而且是非常非常高频的面试题,那就是Spring中的Bean...

2022-11-01 14:23:58查看全文 >>

springboot自动配置原理(springboot注解大全)

springboot自动配置原理(springboot注解大全)

配置文件能写什么?相信接触过 SpringBoot 的朋友都知道 SpringBoot 有各种 starter 依赖,想...

2022-11-01 13:42:12查看全文 >>

spring三级缓存(spring三级缓存图解)

spring三级缓存(spring三级缓存图解)

1. 循环依赖什么是依赖注入?假设有两个类A和B,A在实例化的时候需要B的实例,而B在实例化时又需要A的实例,在类的实例...

2022-11-01 14:08:09查看全文 >>

文档排行