引言

本文承接前面的《Spring Boot————Spring Boot启动流程分析》,主要测试一下ApplicationContextInitializerSpringApplicationRunListenerApplicationRunnerCommandLineRunner这四个接口实现之下的组件是何时在Spring Boot项目启动时创建并执行相关方法的。

应用测试使用的是Spring Boot版本是2.0.6:

测试步骤

1、实现四个接口

这四个接口提供了在Spring 容器启动前后相关的操作方法,我们通过实现这些接口,可以查看相关的执行流程,为日后业务中需要在启动时执行的工作做好理论基础。

在这四个接口中,ApplicationContextInitializer、ApplicationRunner、CommandLineRunner都是只有一个抽象方法需要被实现,因此,在Spring 启动过程之中,也只会在某个时刻执行一次;而SpringApplicationRunListener的方法贯穿了整个spring启动的始终。

  • 实现ApplicationContextInitializer:
public class MyApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {@Overridepublic void initialize(ConfigurableApplicationContext applicationContext) {System.out.println("MyApplicationContextInitializer...initialize..." + applicationContext);}
}
  • 实现SpringApplicationRunListener

注意,SpringApplicationRunListener的实现类要求必须具备一个有参构造,否则会启动报错,具体可以参考该接口的另一个实现类:EventPublishingRunListener。

public class MySpringApplicationRunListener implements SpringApplicationRunListener {public MySpringApplicationRunListener(SpringApplication application, String[] args) {// SpringApplicationRunListener 的实现类要求必须具备有参构造}@Overridepublic void starting() {System.out.println("MySpringApplicationRunListener...starting...");}@Overridepublic void environmentPrepared(ConfigurableEnvironment environment) {Object osName = environment.getSystemProperties().get("os.name");System.out.println("MySpringApplicationRunListener...environmentPrepared..." + osName);}@Overridepublic void contextPrepared(ConfigurableApplicationContext context) {System.out.println("MySpringApplicationRunListener...contextPrepared...");}@Overridepublic void contextLoaded(ConfigurableApplicationContext context) {System.out.println("MySpringApplicationRunListener...contextLoaded...");}@Overridepublic void started(ConfigurableApplicationContext context) {System.out.println("MySpringApplicationRunListener...started...");}@Overridepublic void running(ConfigurableApplicationContext context) {System.out.println("MySpringApplicationRunListener...running...");}@Overridepublic void failed(ConfigurableApplicationContext context, Throwable exception) {System.out.println("MySpringApplicationRunListener...failed...");}
}
  • 实现ApplicationRunner:
@Component
public class MyApplicationRunner implements ApplicationRunner{@Overridepublic void run(ApplicationArguments args) throws Exception {System.out.println("MyApplicationRunner...run...");}
}
  • 实现CommandLineRunner:
@Component
public class MyCommandLineRunner implements CommandLineRunner {@Overridepublic void run(String... args) throws Exception {System.out.println("MyCommandLineRunner...run..." + Arrays.asList(args));}
}

2、配置组件

在第一步中,我们已经通过实现了四个接口,定义了四个自定义的组件,按照顺序,以此为:MyApplicationContextInitializer、MySpringApplicationRunListener、MyApplicationRunner、MyCommandLineRunner。

那么根据《Spring Boot————Spring Boot启动流程分析》中的描述,前两个组件是需要配置到类路径下的META-INF/spring.factories配置文件中的,因此,我们可以在 “src/main/resources” 文件夹下添加一个META-INF文件夹,然后新建一个spring.factories文件,并添加下面内容:

# Initializers
org.springframework.context.ApplicationContextInitializer=\
com.example.demo.startup.MyApplicationContextInitializer# Application Listeners
org.springframework.boot.SpringApplicationRunListener=\
com.example.demo.startup.MySpringApplicationRunListener

而后两个组件: MyApplicationRunner 和 MyCommandLineRunner,则可以通过@Component注解,直接注入到 IOC容器中即可,第一步的代码中也已经标记。

3、启动项目

配置好四个组件之后,我们来启动项目,观察执行结果:

上面两个截图,已经看到输出了不同的打印日志,可以看到他们执行的先后顺序都是怎样的。

综上,就是关于对项目应用启动时的相关描述和测试,欢迎大家文末留言。

Spring Boot————应用启动时的监听机制测试相关推荐

  1. Spring Boot jar 启动时设置环境参数

    文章目录 1 摘要 2 核心代码 2.1 spring Boot 多环境配置 2.2 spring Boot 项目启动命令 3 Spring boot 简易启动与停止 shell 脚本 3.1 启动脚 ...

  2. spring boot实战(第二篇)事件监听

    前言 spring boot在启动过程中增加事件监听机制,为用户功能拓展提供极大的便利. 支持的事件类型四种 ApplicationStartedEvent ApplicationEnvironmen ...

  3. Spring Boot————ApplicationListener实现逃课事件监听

    引言 上一篇文章转了一篇关于ApplicationListener用于在Web项目启动时做一些初始化的用法. 但是,在实际生产过程中,当一个事件产生,又是如何被onApplicationEvent() ...

  4. Spring Boot 设置启动时banner

    Spring Boot项目再启动的时候默认会在控制台输出一个字符banner图案,如下图: 我们可以通过下面的方法关闭启动时显示字符banner图案: 关闭banner方法一: public stat ...

  5. 深入理解Spring的容器内事件发布监听机制

    前言 Spring 提供了 ApplicationContext 事件机制,可以发布和监听事件,这个特性非常有用. Spring 内置了一些事件和监听器,例如在 Spring 容器启动前,Spring ...

  6. springBoot启动事件监听机制

    springBoot启动之事件监听机制源码解析 1. Java的事件监听机制 在进行正式的分析之前,先介绍一下Java的事件监听机制.参考05–SpringBoot启动之事件监听机制 Java事件监听 ...

  7. spring boot应用启动原理分析

    spring boot quick start 在spring boot 里,很吸引人的一个特性是可以直接把应用打包成为一个jar/war,然后这个jar/war是可以直接启动的,不需要另外配置一个W ...

  8. 【转载】SpringBoot 事件发布监听机制使用

    前言 这一篇从应用角度来跟大伙讲讲 这个 spring 事件监听机制 ,顺便涉及到那些我认为大家应该一块了解的,我也会展开说说. 文章内容(包括不限于) : 1. 对比观察者模式 2. 应用场景的分析 ...

  9. 记一次 Spring Boot 项目启动卡住问题排查记录

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 陈凯玲 来源 | https://url.cn ...

最新文章

  1. mysql 5.7报1055错误的解决方法
  2. No Fine-Tuning, Only Prefix-Tuning
  3. Linux端口号总结
  4. python逻辑运算符不懂_Python之逻辑运算符
  5. 基础向:关于异常(Exception)面试常会问到的问题
  6. 第二次作业——个人项目实战之随机数独生成
  7. 智能优化算法:动物迁徙优化算法-附代码
  8. 学生选课系统项目分析-1,架构
  9. 免费一年VPS,digitalocean加上GitHub学生包
  10. C#使用Oxyplot绘制监控界面
  11. 网络系统集成实习——第一天——2017.9.6
  12. 2012 CSP-S 初赛 答案解析
  13. ssh连接Linux机器一直让输入密码
  14. net面试整试题及参考答案【转】
  15. AD软件PCB转PADS
  16. STM32——SDIO简介
  17. 2021年安全员-A证报名考试及安全员-A证考试资料
  18. “平步青云”:Oracle系统平台技术助力企业私有云建设
  19. Android项目总结之社会化分享
  20. Cesium 视锥体绘制,并动态更新朝向

热门文章

  1. 数组中的filter方法_数组filter()方法以及JavaScript中的示例
  2. YOLOv3改进方法增加特征尺度和训练层数
  3. c++实现双向链表操作
  4. php mysql redis mq_docker 搭建 php-mysql-nginx-redis-rabbitmq环境
  5. oracle其他盘添加表空间吗,oracle增加表空间的四种方法
  6. filter过滤器_JavaWeb之 Filter(过滤器)
  7. 2021年宝鸡中学高考成绩查询,宝鸡中学排名前十名,2021年宝鸡中学排名一览表
  8. linux启动keepalived服务,llinux企业常用服务---HA+keepalived双机热备
  9. 易语言通过服务器发送文件,易语言服务器与客户端发送文件
  10. 新萝卜家园win11全新专业版64位系统v2021.07