IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> SprignbootApplication执行流程 -> 正文阅读

[Java知识库]SprignbootApplication执行流程

SprignbootApplication执行流程

执行流程

1.如果我们使用的是SpringApplication的静态run方法,那么这个方法里面首先会创建一个Application的对象实例,然后调用这个创建好的SpringApplication的实例run方法。在SpringApplication实例化的时候它会做几个事情

? 1.1根据calsspath里面是否存在某个特种类来判断是否创建一个Web应用使用的ApplicationContext类型还是一个非Web应用使用的ApplicationContext

? 1.2使用SpringFactoriesLoader在应用的classpath中查找并加载所有可用的ApplicationContextInitializer

? 1.3使用SpringFactoriesLoader在应用的classpath众筹安徽找并加载所有可用的ApplicationListener

? 1.4推断并设置main方法的定义类

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

2.SpringApplication实例初始化完成并完成设置后就开始执行run的方法,方法执行开始,首先遍历执行所有通过SpringFactoryesLoader可以查找到并加载的SpringApplicationRunlistener调用它们的started方法,告诉SpringApplicationRunListener Springboot应用要开始执行了

3.创建Springboot应用将要使用的Enviroment(包括配置要使用的PropertySource和profile)

4.遍历调用所有的SpringApplicationRunlistenerenviromentPrepared方法,

5.打印banner

6.根据用户是否明确设置了applicationContextClass类型以及初始化阶段的判断,决定为Springboot应用创建什么类型的ApplicationContext并创建完毕,然后根据条件是否添加S糊涂down Hook,决定是否使用自定义的BeanNameGenerator,决定是否使用自定义的ResourceLoader,将之前准备好的Environment设置给创建好的ApplicationContext使用

7.ApplicationContext创建好之后,SpringApplication会再次借助Spring-FactoriesLoader,查找并加载classpath中的所有可用的ApplicationContext-initializer,然后白能力调用这些ApplicationContextInitializer的initialize方法来对已经创建好的Application进行进一步的处理

8.遍历调用所有SpringApplicationRunlistener的contextPrepared方法,

9.最核心的一部,将之前通过的@EnableAutoCOnfiguration获取的所有配置以及其它形式的IOC容器配置加载到现已经准备完毕的ApplicationCOntext。

10遍历调用所有的SpringApplicationRunlistener的contextLoader方法,告诉所有的SpringApplicationRunlistener,ApplicationContext装填完毕

11调用ApplicationContext的refreash方法完成IOC容器可用的最后一道工序,

12查询ApplicationCOntext中是否有注册CommandLinRunner,如果有就遍历他们执行他们

13正常情况下,遍历执行SpringApplicationRunListener的finished方法(如果不是正常的情况下就调用所有的SpringApplicationRunlistener的finished方法)

至此我们完成了一个Springboot的应用的启动,整个过程看起来是无比的长,因为很多都是时间通知的扩展点,如果我们这些这些逻辑暂时忽略,那么我们的执行过程就可以精简到几步

—> 收集各种条件和回调接口,例如ApplicationContextIntializerApplicationListener

—> 通知started()

—>准备environment

—>通知environmentPrepared();

—>创建并初始化ApplicationContext,例如设置一些Environment,加载配置等…

—>通知contextPrepared()

—>通知contextLoader()

—>执行refresh完成IOC让其可用的最后一个工序

—>执行CommanadLinerunner

—>通知finished()

SpringApplicationRunListner

SpringApplicationRunListener是一个只有Springboot应用的main方法执行过程中接受不同执行时点时间通知的监听者

CommadLineRuner

是SpringBoot应用特定的回调扩展接口

ApplicationContextInitializer

实现一个ApplicationContextInitializer只需要实现它的方法就可以了,这么做会通过SpringFactoriesLoader进行配置,或者通过SpringApplication.addInitializers(…)设置即可

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-04-14 23:36:51  更:2022-04-14 23:43:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:08:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码