一、创建springboot脚手架工程
springboot官方提供一个web网页用于构建脚手架工程 https://start.spring.io
Project选项: Java生态体系中有三大构建工具:Ant、Maven和Gradle 。这里生成脚手架工程可以选择使用maven或gradle 。这里选择使用更为简洁的gradle。
language选项: 这里使用Java语言
springboot版本: 选择正式版 2.2.2
其他根据自己的信息进行填写,最终选择 generate 就会弹出下载页面。根据提示下载到本地,解压后工程结构目录如下
(有个Controller目录是我自己加进去的不需理会)
打开intelliJ IDEA 导入脚手架工程。开始分析springboot!
二、 导入脚手架代码启动查看
在DemoApplication中的main方法开始启动
调用SpringApplication类中的静态run方法,不带运行参数。
这里primarySource参数的内容如下
执行到下一个run方法,注意这里的primarySources参数就是一个数组了。
那么在这个run方法中做了两件事
三、分析run方法中的两件事
3-1、new SpringApplication(primarySources)
创建一个SpringApplication的实例
3-2、run(args)
运行
3-1对应的创建SpringApplication实例操作
那么在创建SpringApplication实例中做了如下操作
1.将资源初始化加载器置空。
2.断言资源加载类不能为 null,否则报错
3.初始化加载资源类集合并去重
4.推断当前 WEB 应用类型,WebApplicationType(三种)
5.设置应用上下文初始化器
6.设置监听器
7.推断主应用类
这段操作主要做的事情是
3-2对应的运行执行的操作
这段操作主要做的事情是
1.创建并启动计时监控类
2.初始化应用上下文和异常报告集合
3.设置系统属性 ‘java.awt.headless’ 的值,默认值为:true
4.创建所有 Spring 运行监听器并发布应用启动事件
5.初始化默认应用参数类
6.根据运行监听器和应用参数来准备 Spring 环境
7.创建 Banner 打印类
8.创建应用上下文
9.准备异常报告器
10.准备应用上下文
11.刷新应用上下文
12.应用上下文刷新后置处理
13.停止计时监控类
14.输出日志记录执行主类名、时间信息
15.发布应用上下文启动完成事件
16.执行所有 Runner 运行器
17.发布应用上下文就绪事件
18.返回应用上下文
内容参考来自(https://blog.youkuaiyun.com/qq_37598011/article/details/90969634 )
网上找到的springboot容器启动流程,侵删。
下面是一张我在分析这段代码时候记录的调用关系,供参考。
2020年01月10日 witch_soya 转载请注明来源