【SpringBoot】主启动类的功能和运行

SpringApplication.run(); 方法


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

运行了一个main()方法,实际上是开启了一个服务;

SpringApplication.run()方法又执行了一个run,SpringApplication的构造方法有几个点,设置属性的路径,处理路径的bean、设置监听器,设计初期化执行的 方法;

核心点在于构造器的几个方法:

主要点在于设置资源加载器、设置主配置类、获取application的类型,详细逐步打断点看

  1. this.properties.setWebApplicationType(WebApplicationType.deduceFromClasspath());根据关键字获取设置当前 SpringApplication 的类型
  2. this.setInitializers设置初始化器。
  3. this.setListeners设置监听器。
  4. this.mainApplicationClass = this.deduceMainApplicationClass();设置主类。

引导启动器、初始化器、监听器的加载过程是一样的,经过getSpringFactoriesInstances()

遍历查找之后,在进行配置进去;

参照学习:

狂神说SpringBoot02:运行原理初探

spring boot 启动过程(一):创建 SpringApplication 对象_java创建一个springboot application-CSDN博客

spring boot 启动过程(二)run()方法_springbootrun方法做了什么-CSDN博客

图例:

狂神说的图例:

根据step看相关的流程:

  1. 创建一个SpringApplication()对象,创建对象是 加载init的初期化方法
    1. 推断应用类型
    2. 加载所有可用的初期化器
    3. 设置所有的监听器
    4. 推断并设置main方法的定义类
  2. 实例化对象,执行run()方法
    1. 应用init的实例,应用监听器监听
    2. 初始化监听器
    3. 启动监听器
    4. 启动监听器
  3. 装配环境参数
    1. 创建配置环境
    2. 加载属性资源
    3. 加入预监听集合 ??
  4. 加载打印banner.txt
  5. 准备上下文报告器,通过传入的类名,使用类加载器获取全路径,使用反射得到class对象生成实例再返回。
  6. 上下文前置处理
    1. 监听
    2. env环境设置
    3. 资源获取
  7. 执行上下文区域
    1. 根据类型创建上下文
    2. Web/Standard
      1. Web类型:一直在执行
      2. Standard类型:执行一次就关闭
    3. 上下文刷新
      1. bean工厂加载
      2. 生产bean
      3. 刷新生命周期
  8. 上下文后置处理
    1. 计时器结束
    2. 监听结束
  9. 发布应用上下文启动完成
  10. 执行Runner运行器
  11. 发布应用上下文就绪并返回
  12. SpringApplication启动

总结

结合资料学习了解,SpringApplication这个类主要做四件事

  1. 推断 这个Spring的项目是Web项目还是标准项目(Standard);
  2. 查找 并 加载 所有可用初始化器,设置到<font style="color:rgba(0, 0, 0, 0.9);">initializers</font>中;
  3. 找出所有的应用监听器,设置到<font style="color:rgba(0, 0, 0, 0.9);">listeners</font>中;
  4. 推断并设置main方法的定义类,找到运行的主类;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨DaB

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值