SpringBoot执行流程

@(SpringBoot)[springboot,启动流程]

  • SpringBoot执行流程

    • 基本概述
    • SpringBoot应用启动步骤简要示意图
      • SpringApplicationRunListener
      • ApplicationContextInitializer
      • ApplicationRunner和CommandLineRunner
      • ApplicationRunner
      • CommandLineRunner
    • SpringBoot执行流程详细版

基本概述

SpringBootSpring应用的启动流程进行了一个“模板化”的操作,所以我们才能通过SpringApplication.run(XXX.class, args)的方式来进行一站式的启动。其内部逻辑也是个较复杂的过程,下文将对执行流程进行阐述。本流程参考的SpringBoot版本为1.4.3.RELEASE

SpringBoot应用启动步骤简要示意图

通过上面这个简要示意图,可以看出,只要将事件通知的扩展点忽略,SpringBoot的执行流程并不是想象中那么复杂。

SpringApplicationRunListener

SpringApplicationRunListenerSpringBoot执行过程中,不同执行时间点时间通知的监听者,一般来说也没有必要自己实现一个SpringApplicationRunListener,即使是SpringBoot默认也只实现了一个org.springframework.boot.context.event.EventPublishingRunListener。通过这个类,在SpringBoot启动时,在不同的时间点发布不同的应用事件类型ApplicationEventSpringBoot初始化时加载的ApplicationListener如果对这些事件感兴趣,则可以接收并处理。

public interface SpringApplicationRunListener {void started();void environmentPrepared(ConfigurableEnvironment environment);void contextPrepared(ConfigurableApplicationContext context);void contextLoaded(ConfigurableApplicationContext context);void finished(ConfigurableApplicationContext context, Throwable exception);
}

ApplicationContextInitializer

通过这个类,可以在ApplicationContext调用refresh()方法前,对ApplicationContext对象做进一步的设置或者处理。

public interface ApplicationContextInitializer<C extends ConfigurableApplicationContext> {void initialize(C applicationContext);
}

ApplicationRunner和CommandLineRunner

我们在开发中可能会有这样的情景。需要在容器启动的时候执行一些内容。比如读取配置文件,数据库连接之类的。SpringBoot给我们提供了两个接口来帮助我们实现这种需求。这两个接口分别为CommandLineRunnerApplicationRunner。他们的执行时机为容器启动完成的时候。

这两个接口中有一个run方法,我们只需要实现这个方法即可。这两个接口的不同之处在于:ApplicationRunnerrun方法的参数为ApplicationArguments,而CommandLineRunner接口中run方法的参数为String数组。

如果有多个实现类,而你需要他们按一定顺序执行的话,可以在实现类上加上@Order注解。@Order(value=整数值)SpringBoot会按照@Order中的value值从小到大依次执行。

ApplicationRunner

public interface ApplicationRunner {void run(ApplicationArguments args) throws Exception;
}

CommandLineRunner

public interface CommandLineRunner {void run(String... args) throws Exception;
}

SpringBoot执行流程详细版

src="http://www.xmind.net/embed/K9s5" width="100%" height="700px">

——————参考《SpringBoot揭秘——快速构建微服务体系》
——————参考《SpringBoot之CommandLineRunner接口和ApplicationRunner接口区别》

SpringBoot执行流程相关推荐

  1. Spring Boot 执行流程

    2019独角兽企业重金招聘Python工程师标准>>> SpringBoot执行流程 基本概述 SpringBoot将Spring应用的启动流程进行了一个"模板化" ...

  2. SpringBoot入门到精通-SpringBoot启动流程(七)

    定义自己的starter SpringBoot入门到精通-Spring的注解编程(一) SpringBoot入门到精通-SpringBoot入门(二) SpringBoot入门到精通-Spring的基 ...

  3. SpringBoot 启动类 @SpringBootApplication 注解 以及执行流程

    @SpringBootApplication  : 是Sprnig Boot项目的核心注解,目的是开启自动配置 目录 @SpringBootApplication  : 是Sprnig Boot项目的 ...

  4. SpringBoot启动流程分析(四):IoC容器的初始化过程

    SpringBoot系列文章简介 SpringBoot源码阅读辅助篇: Spring IoC容器与应用上下文的设计与实现 SpringBoot启动流程源码分析: SpringBoot启动流程分析(一) ...

  5. Spring Security 案例实现和执行流程剖析

    在线演示 演示地址:http://139.196.87.48:9002/kitty 用户名:admin 密码:admin Spring Security Spring Security 是 Sprin ...

  6. mybatis mysql 调用存储过程 多个返回值_MyBatis的SQL执行流程不清楚?很简单!

    点击上方蓝色字体,选择"标星公众号" 优质文章,第一时间送达 作者:双子孤狼- blog.csdn.net/zwx900102/article/details/108455514 ...

  7. SpringBoot启动流程解析

    写在前面: 由于该系统是底层系统,以微服务形式对外暴露dubbo服务,所以本流程中SpringBoot不基于jetty或者tomcat等容器启动方式发布服务,而是以执行程序方式启动来发布(参考下图ke ...

  8. springmvc源码阅读3--dispatcherServlet reqeust的执行流程

    一.前言 太多的时候总是会遇到群里面问,报404怎么肥事呀,前台的参数怎么后台收不到呀--,上次就在群里面遇到过,围绕这一个点:input的name值是不是错了呀,人家妹子都截了好几次图说没有问题,然 ...

  9. Springboot启动流程分析(四):完成启动流程

    目录 一 添加BeanPostProcessors到IOC容器 二 国际化支持 三 初始化监听器的多路播放器 四 刷新容器 五 注册监听器到IOC容器的多播器 六 完成bean的大规模实例化 6.1 ...

最新文章

  1. xface 远程桌面 无法使用tab键盘
  2. mxnet迁移学习 注释版
  3. 图像处理、语音处理的应用及前沿技术_人工智能,虚拟技术,语音识别技术在我们的生活中...
  4. python b64encode_Python base64模块详解 | 学步园
  5. linux 编译安装apache
  6. HTML期末作业-旅游网页
  7. 一个新基民的感叹:人心不足蛇吞象
  8. 清除浮动-父级添加overflow(HTML、CSS)
  9. innodb下的mvcc_Mysql事务隔离以及MVCC实现原理
  10. linux 操作mysql 命令_linux下mysql操作命令大全
  11. solidity合约调用合约方法的方式
  12. Linux- 控制 LED 灯设备(LED 子系统)
  13. 恢复手机HTML文件,easyrecovery恢复手机误删文件方法
  14. 搞Java的年薪 40W 是什么水平? 1
  15. 学计算机要高智商吗,这7大高智商专业,很容易挂科,如果不是学霸级人物,最好不要报考...
  16. 英语词根、词根、前缀、后缀大全
  17. 回溯法,子集选择合集
  18. Rsync守护进程部署和实践
  19. Vscode c与c++编译环境配置(.vscode),看这一篇就够了
  20. 问题 H: 活字印刷

热门文章

  1. C语言指针——基础知识理解
  2. 隐马尔可夫(HMM)/感知机/条件随机场(CRF)----词性标注
  3. C语言实例——判断是否为闰年
  4. C#设计模式之8-组合模式
  5. windows10中屏幕键盘 vs 触摸键盘
  6. 自己搭建mysql服务要知道的二三事
  7. docker前后端分离_Docker分离模式介绍
  8. 我好吗 太阳照常升起梁静茹_明天太阳会升起吗?
  9. linux内核源代码_如何从源代码构建和安装最新的Linux内核
  10. 116_Power Pivot 先进先出原则库龄库存计算相关