springboot 启动源码分析

本文详细探讨了SpringBoot的启动原理,从创建SpringApplication实例到ApplicationContext的refresh方法,解析了配置加载、自动配置、Bean扫描和Web服务器启动等关键步骤。SpringBoot简化了传统Spring应用的启动流程,通过自动配置和内嵌Web服务器实现快速开发。
摘要由CSDN通过智能技术生成

springboot 启动源码分析

一、springboot 启动原理

1、概述

一个springboot项目的启动非常简单,只要启动一个main方法就可以完成整个项目的启动。

  • 1、而且项目创建非常快,几秒钟就可以搭建完成;
  • 2、快速集成插件,Spring Boot 提供了依赖添加,快速的集成各种框架;
  • 3、内置了 Web 容器(嵌入的Tomcat);
  • 4、提供了很多监控的指标;
  • 5、零 XML配置;
  • 6、简化Maven 配置
  • 7、自动配置Spring

2、启动类如下:

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

就是这个run方法,执行这个run方法就完成了一个springboot项目的启动, 其实这个run
方法要大体上完成两个事情:

  • 1、完成spring容器的启动,把需要扫描的类实例化
  • 2、启动Servlet容器,完成Servlet容器的启动

进入SpringApplication.run(SpringBootApp.class,args);的run方法分析得出spring启动的核心代码就是refreshContext(context);其上下文对象就AnnotationConfigServletWebServerApplicationContext

重点分析一下这个refreshContext(context)方法,springboot的spring容器的启动最终是掉到了上下文对象的refresh方法的。

为什么要使用嵌入式服务器?

节省了下载tomcat,应用程序也不需要再打war包放在webapp目录下运行,只需要安装java虚拟机就可以直接部署应用程序,springboot已经内置了tomcat.jar,会利于其spi 机制加载SpringMVC。

3、主要流程大体可以归纳如下:

  • 1、首先要创建一个SpringApplication对象实例,然后调用这个创建好的SpringApplication的实例方法。在SpringApplication实例初始化的时候,它会提前做几件事情:

    • 根据classpath里面是否存在某个特征类(org.springframework.web.context.ConfigurableWebApplicationContext)来决定是否应该创建一个为Web应用使用的ApplicationContext类型。
    • 使用SpringFactoriesLoader在应用的classpath中查找并加载所有可用的ApplicationContextInitializer和ApplicationListener
  • 2、 SpringApplication实例初始化完成并且完成设置后,就开始执行run方法的逻辑了,首先遍历执行所有通过SpringFactoriesLoader可以查找到并加载的SpringApplicationRunListener。调用它们的started()方法。

  • 3、 创建并配置当前Spring Boot应用将要使用的Environment(包括配置要使用的PropertySource以及Profile)。

  • 4、 遍历调用所有SpringApplicationRunListener的environmentPrepared()的方法,告诉他们Environment准备好了”。

  • 5、 如果SpringApplication的showBanner属性被设置为true,则打印banner。

  • 6、根据用户是否明确设置了applicationContextClass类型以及初始化阶段的推断结果,决定该为当前SpringBoot应用创建什么类型的ApplicationContext并创建完成,将之前准备好的Environment设置给创建好的ApplicationContext使用。

  • 7、 ApplicationContext创建好之后,SpringApplication会再次借助Spring-FactoriesLoader,查找并加载classpath中所有可用的ApplicationContext-Initializer,然后遍历调用这些ApplicationContextInitializer的initialize(applicationContext)方法来对已经创建好的ApplicationContext进行进一步的处理。

  • 8、遍历调用所有SpringApplicationRunListener的contextPrepared()方法。

  • 9、将之前通过@EnableAutoConfiguration获取的所有配置以及其他形式的IoC容器配置加载到已经准备完毕的ApplicationContext。

  • 10、 遍历调用所有SpringApplicationRunListener的contextLoaded()方法。

  • 11、 调用ApplicationContext的refresh()方法,完成IoC容器可用的最后一道工序。

  • 12、 查找当前ApplicationContext中是否注册有CommandLineRunner,如果有,则遍历执行它们。

  • 13、 正常情况下,遍历执行SpringApplicationRunListener的finished()方法、(如果整个过程出现异常,则依然调用所有SpringApplicationRunListener的finished()方法,只不过这种情况下会将异常信息一并传入处理)

简洁版:

  1. 加载并解析配置:Spring Boot会加载并解析应用的配置文件(application.properties或application.yml),并将配置信息绑定到对应的Spring Boot自动配置类中
  2. 启动Spring应用上下文:Spring Boot会启动Spring应用上下文,也称为ApplicationContext。 ApplicationContext是Spring的核心容器,负责管理Bean的创建、依赖注入等工作。
  3. 自动配置:Spring Boot会根据应用的依赖和配置情况,自动配置一些常用的功能和组件。这些自动配置类通常通过@EnableAutoConfiguration注解来引入。
  4. 扫描和注册Bean:Spring Boot会扫描应用中的@Component、@Controller等注解,自动注册成为Spring的Bean,并加入到应用上下文中供后续使用。
  5. 调用ApplicationContext的refresh()方法,完成IoC容器最后的实例化。
  6. 启动内嵌的Web服务器:如果应用有Web功能,Spring Boot会启动一个内嵌的Web服务器(如Tomcat、Jetty),并将控制权交给该服务器处理请求。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个开源的Java框架,用于构建独立的、可执行的、生产级的Spring应用程序。它提供了一个快速、简单的方式来开发和部署应用程序。而在Spring Boot启动过程中,有以下几个主要的步骤: 1. 加载启动类:Spring Boot应用程序的启动类通常是一个带有`@SpringBootApplication`注解的Java类。在应用程序启动时,会通过`main`方法加载这个启动类。 2. 创建Spring Application对象:Spring Boot会创建一个`SpringApplication`对象,用于启动应用程序。`SpringApplication`是Spring Boot框架的核心类,它负责管理整个应用程序的生命周期。 3. 解析配置信息:在启动过程中,`SpringApplication`会解析`application.properties`或`application.yaml`文件中的配置信息,并将其加载到Spring环境中。这些配置信息可以用来配置应用程序的各个方面,如数据库连接、日志级别等。 4. 创建并配置Spring容器:Spring Boot使用Spring容器来管理应用程序中的各个Bean。在启动过程中,`SpringApplication`会根据配置信息创建并配置一个Spring容器,该容器负责加载和管理应用程序中的所有Bean。 5. 执行自定义逻辑:在Spring Boot启动过程中,可以添加自定义的逻辑。例如,可以通过实现`CommandLineRunner`接口来在应用程序启动后执行一些初始化操作。 6. 启动应用程序:完成上述步骤后,`SpringApplication`会启动应用程序,并通过Servlet容器(如Tomcat、Jetty等)监听端口,开始接收和处理HTTP请求。 总体而言,Spring Boot启动流程是一个通过加载启动类、解析配置信息、创建和配置Spring容器的过程。通过Spring Boot的自动配置和快速启动能力,开发者可以更加方便地构建和部署Spring应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值