(第13天)每日源码调试之旅--SpringBoot2.1.0框架

接着昨天的调试,今天分析SpringApplication实例真正的run方法:

先看doc介绍:运行Spring应用,创建和更新一个新的ApplicationContext。

再看具体实现:

  • 开启StopWatch,用于一系列任务的计时,显示总运行时间和每一个命名的任务运行时间。
  • 定义ConfigurableApplicationContext变量,SpringBootExceptionReporter变量,SpringBootExceptionReporter是用于支持定制的SpringApplication启动异常报告的回调接口。
  • 配置SYSTEM_PROPERTY_JAVA_AWT_HEADLESS属性。
  • 开启Spring应用运行时监听器,用于run方法的监听。
  • 创建ApplicationArguments实例,用于获取运行时的参数获取。
  • 创建ConfigurableEnvironment实例,ConfigurableEnvironment的doc介绍:将被大部分Environment类型实现的配置接口,

    提供用于设置活动的和默认配置文件以及操作底层属性源的工具,允许客户设置和验证需要的属性,定制服务转换。实例的创建调用的prepareEnvironment方法:

    1. 根据WebApplicationType创建相应的ConfigurableEnvironment实例。

    2. 从ApplicationArguments中取出args配置到ConfigurableEnvironment实例。

    3. 调用ConfigurableEnvironment监听了处于准备好但还未完全创建阶段的监听器的监听方法。

    4. 绑定ConfigurableEnvironment实例到SpringApplication。

    5. 如果ConfigurableEnvironment是定制过的,将其保证在一个EnvironmentConverter中,用于转换到可用的ConfigurableEnvironment。

    6. 将属性源连接到ConfigurableEnvironment。

    7. 返回创建完全的ConfigurableEnvironment实例。

  • ConfigurableEnvironment实例配置需要忽视的beans的信息,该beans将不被加载到Spring容器。

  • 启动时控制台打印SpingBoot的Banner
  • 进入createApplicationContext方法,创建createApplicationContext实例,即Spring容器:

       此处主要是判断WebApplicationType类型,然后创建相应的容器。

  • 初始化SpringBootExceptionReporter实例。
  • 调用prepareContext方法,准备容器,查看内部实现:
    1. 容器设置环境。
    2.  postProcessApplicationContext方法:注册beanNameGenerator,设置resourceLoader,设置ConversionService
    3. 在容器更新前应用所有的ApplicationContextInitializer。
    4. 调用所有监听了容器准备好阶段的监听器的监听方法,打印运行到容器准备好阶段的运行时间。l
    5. 添加用于引导的指定单例beans。
    6. 加载资源。
    7. 调用所有监听了容器加载资源完成阶段的监听器的监听方法。
  • 进入refreshContext方法,更新容器:

先暂停,明天继续。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值