springboot 启动类有两大核心: 一个是注解@SpringBootApplication,一个是main方法里面的SpringApplication.run。
1、通过main方法 启动springboot

2、首先进入SpringAplication类run方法

3、run方法新建SpringApplication对象

4、SpringApplication对象的run方法,首先创建并启动计时监控类

5、接着调用getRunListeners创建所有spring监听器

6、接着DefaultApplicationArguments初始化应用应用参数

7、接着prepareEnvironment根据运行监听器和参数准备spring环境

8、接着调用createApplicationContext方法创建应用上下文

9、通过prepareContext准备应用上下文

10、refreshContext方法刷新上下文(通过spring ioc模板方法初始化)

11、调用stop方法停止计时监控器类

12、调用started发布应用上下文 启动完成事件

13、callRunners方法执行所有runner运行器

14、调用running发布应用上下文就绪事件

15、最后返回应用上下文

@SpringBootApplication包括三个注解和四个元注解:

元注解是指注解的注解,Java中有:
① @Retention: 定义注解的保留策略
② @Target:定义注解的作用目标
③ @Document:说明该注解将被包含在javadoc中
④ @Inherited:说明子类可以继承父类中的该注解

1、@EnableAutoConfiguration:SpringBoot根据应用所声明的依赖来对Spring框架进行自动配置。是借助@Import将所有符合自动配置条件的bean定义加载到IoC容器。

2、@SprinbootConfiguration:它是JavaConfig形式的Spring IOC容器的配置类。被标注的类类似于在spring的XML配置文件中(applicationContext.xml),装配所有bean事务,提供了一个spring的上下文环境。

3、@ComponentScan:组件扫描,可自动发现和装配Bean,@ComponentScan进行package进行扫描。

4、关于java元注解:

① @Retention: 定义注解的保留策略
② @Target:定义注解的作用目标
③ @Document:说明该注解将被包含在javadoc中
④ @Inherited:说明子类可以继承父类中的该注解

springboot执行流程UML图

springboot执行流程
1、springboot 开始启动(main方法)
2、new Springpplication()构造一个Spring应用
    (1)、配置source
    (2)、配置是否web环境 
    (3)、创建初始化构造器 
    (4)、创建应用监听器  
    (5)、配置主方法所在类
3、SpringApplication启动此应用
4、启动计时器和监听器(HeadLess模式配置) 
    (1)、启动监听模块
        1)、启动
        2)、监听
             a、环境配置
             b、应用上下文 
        3)、结束
    (2)、启动环境模块
        1)、创建配置环境
        2)、加载属性文件资源
        3)、配置监听
    (3)、Beanner配置
    (4)、启动应用程序上下文 
        1)、创建应用上下文
        2)、基本属性配置
             a、加载环境配置
             b、资源加载器
             c、配置监听
             d、加载启动参数
        3)、更新应用程序上下文
             a、准备所需环境bean的工厂
             b、通过工厂生产bean,通过stop停止计时器和监听器,SpringApplication启动结束
5、通过2.2和2.3获取的构造器监听器和4.4.3.a获取的工厂对象得到工厂集合
6、获取工厂类名和类加载器
7、通过类加载器获取spring.factories文件
8、获取工厂类的全路径
9、通过类路径反射获得工厂的class对象、构造方法。
10、生成工厂类实例返回

springboot启动加载流程相关推荐

  1. QT程序启动加载流程简介

    1. QT应用程序启动加载流程简介 1.1      QWS与QPA启动客户端程序区别 1.1.1   QWS(Qt Window System)介绍 QWS(Qt Windows System)是Q ...

  2. spring启动加载流程

    上次看了spring的加载流程,今天发现或多都忘记了,今天又看了一下,顺便总结一下: 标题spring的web项目启动: 1.首先web容器(比如Tomcat)会读取配置在web.xml中的监听器,从 ...

  3. springboot 启动加载数据库数据到redis缓存

    启动项目后, 加载数据库公共配置数据到redis中 import org.springframework.data.redis.core.RedisTemplate; import org.sprin ...

  4. SpringBoot启动加载过程

    文章目录 1. 启动类 @SpringBootApplication 1. @Configuration 2. @EnableAutoConfiguration 3. @ComponentScan 2 ...

  5. springboot 启动加载数据 commandLineRunner

    项目启动时,我们需要加载一些数据或启动定时任务执行数据下载或同步,此时可以用到commandLineRunner类. @Component //被spring容器管理 @Order(value = 2 ...

  6. springboot aop加载流程

    一.创建几个切面. package com.tpw.newday.aspect;import cn.hutool.core.util.ObjectUtil; import cn.hutool.core ...

  7. springboot集成mybatis源码分析-启动加载mybatis过程(二)

    springboot集成mybatis源码分析-启动加载mybatis过程(二) 1.springboot项目最核心的就是自动加载配置,该功能则依赖的是一个注解@SpringBootApplicati ...

  8. 架设KMS服务器流程启动加载方法

    架设KMS服务器流程 启动加载方法 架设KMS服务器流程--启动加载方法 以下操作 root 一.准备Centos服务器CentOS-8.4.2105 1.下载http://mirrors.163.c ...

  9. Launcher启动流程加载流程学习

     声明: 图片本来是有的 涉及到有些代码不能示人没有贴上,不过仅文字说也足够了,请广大老爷们自行下载源码参看流程分析阅读. 目录 一.认识Launcher: 1 1.功能 1 2.样式 2 3.And ...

最新文章

  1. 字节跳动凌晨发半个月奖金,网友:我酸了,又是别人家的公司!
  2. 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序
  3. 西霞口船业公司疑遭外商合谋欺诈
  4. ROS2学习(九).ROS概念 - ROS 2参数(ROS 2 parameters)
  5. 正常矩形计算IOU与与NMS,多边形计算IOU
  6. Python深入-Python的内存管理
  7. Spring : 静态代理模式和JDK、CGLIB动态代理
  8. Ubuntu服务器修复,ubuntu – 服务器攻击,如何修复它
  9. 计算机c盘要满了电脑会卡吗,C盘满了 电脑卡顿了,怎么清理空间
  10. 单片机用c语言编程软件手机版,单片机C语言编程软件(mikroc pro for pic)下载 V7.1.0 官方版 - 比克尔下载...
  11. win10桌面计算机不显示桌面,win10桌面不见了,win10桌面显示不了任何程序
  12. 实现人脸手动祛痘效果---OpenCV-Python开发指南(60)
  13. win10 开 5g 热点
  14. JAVA使用wkhtmltopdf 将Html 导出PDF
  15. Request对象的一般用法
  16. 创建型模型-单例模式
  17. 2014年中南大学研究生复试机试题(字符串、基础dp、最短路)
  18. MeEdu-Admin管理端部署不显示验证码如何解决?
  19. 搞不懂SDN?那是因为你没看这个小故事…
  20. 机器学习 标称型和数值型目标变量

热门文章

  1. linux 多于账户,zabbix+grafana ——小于初始,大于勤拙@时雨扰扰,几多怅惘,几多忧思...
  2. 工业路由器农网改造方案
  3. 鸿蒙系统应用数据库,鸿蒙(HarmonyOS)-Fa应用级轻量存储(数据库)
  4. 对WOW服务端模拟器的思考
  5. MySQL高手进阶指南
  6. Python如何去掉字符串的空格?
  7. 垒骰子(动态规划+矩阵快速幂)
  8. 技术分析-提高显卡效能
  9. 〖大前端 - 基础入门三大核心之 html 篇⑰〗- HTML篇内容总结
  10. Developing for a Jailbroken iPhone A to Z (iOS 4.0.1)(转)