SpringBoot启动方法有哪些具体步骤?

2026-05-29 11:313阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计661个文字,预计阅读时间需要3分钟。

SpringBoot启动方法有哪些具体步骤?

@[TOC]聊聊SpringBoot的启动方法SpringBootApplication注解组成我们了解到SpringBootApplication注解下有三个注解组成:- @SpringBootConfiguration:注解中包含@Configuration,表示被注解的类被添加到IoC容器中- @EnableAutoConfiguration:自动配置- @ComponentScan:组件扫描

@SpringBootConfiguration:注解中包含@Configuration,被修饰的类会被添加到IoC容器中。

@[TOC]

聊聊SpringBoot的启动方法

SpringBootApplication注解组成

我们了解到SpringBootApplication注解下有三个注解组成:

@SpringBootConfiguration:注解中有@Configuration,被修饰的类添加到IOC容器中

SpringBoot启动方法有哪些具体步骤?

@EnableAutoConfiguration:

  • @AutoConfigurationPackage:定义自动扫描的包
  • @Import({AutoConfigurationImportSelector.class}:META-INF/spring.factories定义的bean添加到IOC容器中

@ComponentScan:包扫描

那么我们今天看一下SpringBootApplication的run()方法是怎么初始化的,

关键代码:

new SpringApplication(primarySources).run(args);

构造SpringApplication对象

primarySources就是我们的项目启动主类

也就是先进行实例化SpringApplication类,然后调用它的run()方法

构造方法中对属性填充,具体是设置项目启动类,设置应用类型,设置初始化器,也就是ApplicationContextInitializer的实现类,设置监听器,也就是ApplicationListener的实现类,设置mainApplicationClass属性,也就是启动类了

这里都用到了getSpringFactoriesInstances()方法进行加载类实例,方法中加载META-INF/spring.factories下的类名的数组,然后根据定义的类名数组进行实例化,最后对实例化对象进行排序并返回实例化对象集合

run()方法的具体逻辑

实例化完SpringApplication类后就进行run()方法的调用了,具体业务逻辑:

  • 获取监听类SpringApplicationRunListeners,并启动
  • 创建ApplicationArguments对象,用到的参数args就是启动main()的时候定义的参数,例如端口号等等
  • 调用prepareEnvironment()创建ConfigurableEnvironment对象
  • 创建Banner对象,Banner就是用于输出到控制台的Banner图案
  • 创建Spring容器
  • 调用getSpringFactoriesInstances()方法获取异常报告类
  • 调用prepareContext()方法,具体设置容器的环境,设置应用上下文类的类加载器和资源加载器,应用ApplicationContextInitializer类,触发SpringApplicationRunListeners类的contextPrepared()方法,注册启动参数Bean实例,将启动类注入到Spring容器中
  • 刷新容器
  • 刷新容器后调用的方法
  • 停止启动统计时长,打印启动时长的日志信息
  • 发送结束执行的事件通知
  • 调用ApplicationRunner和CommandLineRunner的实例的run()方法,这些类的run()只在服务启动的时候调用一次
  • 执行SpringApplicationRunListeners的running()方法,这样项目就启动了
  • 返回context对象
  • 总结

    SpringBootApplication的run()方法中的内容还是比较多的,主要分为实例化SpringApplication对象和执行它的run()方法,run()方法中步骤很多,主要是将启动类加入容器中,方便自动配置

    本文共计661个文字,预计阅读时间需要3分钟。

    SpringBoot启动方法有哪些具体步骤?

    @[TOC]聊聊SpringBoot的启动方法SpringBootApplication注解组成我们了解到SpringBootApplication注解下有三个注解组成:- @SpringBootConfiguration:注解中包含@Configuration,表示被注解的类被添加到IoC容器中- @EnableAutoConfiguration:自动配置- @ComponentScan:组件扫描

    @SpringBootConfiguration:注解中包含@Configuration,被修饰的类会被添加到IoC容器中。

    @[TOC]

    聊聊SpringBoot的启动方法

    SpringBootApplication注解组成

    我们了解到SpringBootApplication注解下有三个注解组成:

    @SpringBootConfiguration:注解中有@Configuration,被修饰的类添加到IOC容器中

    SpringBoot启动方法有哪些具体步骤?

    @EnableAutoConfiguration:

    • @AutoConfigurationPackage:定义自动扫描的包
    • @Import({AutoConfigurationImportSelector.class}:META-INF/spring.factories定义的bean添加到IOC容器中

    @ComponentScan:包扫描

    那么我们今天看一下SpringBootApplication的run()方法是怎么初始化的,

    关键代码:

    new SpringApplication(primarySources).run(args);

    构造SpringApplication对象

    primarySources就是我们的项目启动主类

    也就是先进行实例化SpringApplication类,然后调用它的run()方法

    构造方法中对属性填充,具体是设置项目启动类,设置应用类型,设置初始化器,也就是ApplicationContextInitializer的实现类,设置监听器,也就是ApplicationListener的实现类,设置mainApplicationClass属性,也就是启动类了

    这里都用到了getSpringFactoriesInstances()方法进行加载类实例,方法中加载META-INF/spring.factories下的类名的数组,然后根据定义的类名数组进行实例化,最后对实例化对象进行排序并返回实例化对象集合

    run()方法的具体逻辑

    实例化完SpringApplication类后就进行run()方法的调用了,具体业务逻辑:

  • 获取监听类SpringApplicationRunListeners,并启动
  • 创建ApplicationArguments对象,用到的参数args就是启动main()的时候定义的参数,例如端口号等等
  • 调用prepareEnvironment()创建ConfigurableEnvironment对象
  • 创建Banner对象,Banner就是用于输出到控制台的Banner图案
  • 创建Spring容器
  • 调用getSpringFactoriesInstances()方法获取异常报告类
  • 调用prepareContext()方法,具体设置容器的环境,设置应用上下文类的类加载器和资源加载器,应用ApplicationContextInitializer类,触发SpringApplicationRunListeners类的contextPrepared()方法,注册启动参数Bean实例,将启动类注入到Spring容器中
  • 刷新容器
  • 刷新容器后调用的方法
  • 停止启动统计时长,打印启动时长的日志信息
  • 发送结束执行的事件通知
  • 调用ApplicationRunner和CommandLineRunner的实例的run()方法,这些类的run()只在服务启动的时候调用一次
  • 执行SpringApplicationRunListeners的running()方法,这样项目就启动了
  • 返回context对象
  • 总结

    SpringBootApplication的run()方法中的内容还是比较多的,主要分为实例化SpringApplication对象和执行它的run()方法,run()方法中步骤很多,主要是将启动类加入容器中,方便自动配置