Springboot经典面试题---SpringBoot的启动流程

本文详细探讨SpringBoot的启动流程,涉及ClassLoader创建、主类加载、配置文件加载和自动配置执行,有助于理解应用程序工作原理和故障排查。
摘要由CSDN通过智能技术生成

引言:面试是应付面试官,只有真正的掌握了原理,我们才能更好地着手与工作,提升自己的能力。

Spring Boot是一个基于Spring Framework的快速开发应用程序的框架。它提供了一种简单粗暴的方式来构建应用程序,开发人员只需要少量的配置即可快速的构建可运行的应用程序。然而,即使是Spring Boot的核心框架,也有很多可以让我们深入了解它如何工作的知识点。在这篇文章中,我们将深入研究Spring Boot的启动流程,并提供运行过程中的详细解释。

概述

在Spring Boot应用程序的启动过程中,一个类被认为是Spring Boot的入口点:org.springframework.boot.loader.Launcher(准确的说是PropertiesLauncher类extends了Launcher类,最先进入的是PropertiesLauncher类)。Launcher这个类的主要任务是设置ClassLoader和加载应用程序的主类。在执行PropertiesLaunchermain方法之前,Spring Boot会执行一些准备工作,例如创建ClassLoader和加载一些必需的类。接下来,我们将逐步了解Spring Boot在启动过程中的每个步骤。

创建ClassLoader

为了加载应用程序的类和资源,Spring Boot使用了一个自定义的ClassLoader:org.springframework.boot.loader.LaunchedURLClassLoader。Spring Boot使用LaunchedURLClassLoader替代了JDK提供的ClassLoader,这个ClassLoader可以加载来自多个JAR包和目录的类和资源。在Spring Boot启动流程的第一步中,它会执行以下代码创建LaunchedURLClassLoader:

// PropertiesLauncher 的main方法,调用launch类launch方法
public static void main(String[] args) throws Exception {
   PropertiesLauncher launcher = new PropertiesLauncher();
   args = launcher.getArgs(args);
   launcher.launch(args);
}
...
// Launcher类的launch方法
protected void launch(String[] args) throws Exception {
   if (!isExploded()) {
      JarFile.registerUrlProtocolHandler();
   }
   ClassLoader classLoader = createClassLoader(getClassPathArchivesIterator());
   String jarMode = System.getProperty("jarmode");
   String launchClass = (jarMode != null && !jarMode.isEmpty()) ? JAR_MODE_LAUNCHER : getMainClass();
   launch(args, launchClass, classLoader);
}
...
protected Iterator<Archive> getClassPathArchivesIterator
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值