Spring中的监听器SpringApplicationRunListener详解

 更新时间:2023年11月08日 10:03:13   作者:你就像甜甜的益达  
这篇文章主要介绍了Spring中的监听器SpringApplicationRunListener详解,命名我们就可以知道它是一个监听者,分析springboot启动流程我们会发现,它其实是用来在整个启动流程中接收不同执行点事件通知的监听者,需要的朋友可以参考下

SpringApplicationRunListenerde作用

命名我们就可以知道它是一个监听者,分析springboot启动流程我们会发现,它其实是用来在整个启动流程中接收不同执行点事件通知的监听者

SpringApplicationRunListener接口规定了SpringBoot的生命周期,在各个生命周期广播相应的事件,调用实际的ApplicationListener类。

源码分析

在这里插入图片描述

在这里插入图片描述

前面分析过,前面讲过启动的时候会先加载spring会加载所有jar包下的META-INF/spring.factories,然后缓存起来,这里就可以通过类型进行获取;

然后通过反射,实例化SpringApplicationRunListener类;注意,前面讲过实例化的类型,一个是SpringApplication类型,一个String数组类型;

在这里插入图片描述

然后就会在springboot容器的各个阶段通过封装的类SpringApplicationRunListeners进行处理;

方法详解

public interface SpringApplicationRunListener {

     //刚执行run方法时
    void started();
     //环境建立好时候
    void environmentPrepared(ConfigurableEnvironment environment);
     //上下文建立好的时候
    void contextPrepared(ConfigurableApplicationContext context);
    //上下文载入配置时候
    void contextLoaded(ConfigurableApplicationContext context);
    //上下文刷新完成后,run方法执行完之前
    void finished(ConfigurableApplicationContext context, Throwable exception);

}

具体使用

新建类实现SpringApplicationRunListener,需要构造方法,里面两个参数SpringApplication sa, String[] args;

在resources下新建META-INF\spring.factories文件,文件里面将新建的实现类的类路径配置进去:

org.springframework.boot.SpringApplicationRunListener=com.study.springbootplus.config.MyApplicationRunListener
public class MyApplicationRunListener implements SpringApplicationRunListener {

  private final SpringApplication application;
  private final String[] args;

  public MyApplicationRunListener(SpringApplication sa, String[] args) {
    this.application = sa;
    this.args = args;
  }

  @Override
  public void starting() {
    System.out.println("服务启动RunnerTest  SpringApplicationRunListener的starting方法...");
  }

  @Override
  public void environmentPrepared(ConfigurableEnvironment environment) {
    System.out.println("服务启动RunnerTest  SpringApplicationRunListener的environmentPrepared方法...");
  }

  @Override
  public void contextPrepared(ConfigurableApplicationContext context) {
    System.out.println("服务启动RunnerTest  SpringApplicationRunListener的contextPrepared方法...");
  }

  @Override
  public void contextLoaded(ConfigurableApplicationContext context) {
    System.out.println("服务启动RunnerTest  SpringApplicationRunListener的contextLoaded方法...");
  }

  @Override
  public void running(ConfigurableApplicationContext context) {
    System.out.println("服务启动RunnerTest  SpringApplicationRunListener的running方法...");
  }

  @Override
  public void failed(ConfigurableApplicationContext context, Throwable exception) {
    System.out.println("服务启动RunnerTest  SpringApplicationRunListener的failed方法...");
  }

  @Override
  public void started(ConfigurableApplicationContext context) {
    System.out.println("服务启动RunnerTest  SpringApplicationRunListener的started方法...");
  }
}

注意事项

  • 任何一个SpringApplicationRunListener实现类的构造方法都需要有两个构造参数;源码里面分析了,需要根据指定类型的构造方法初始化类;
  • SpringApplicationRunListener的配置在resources下新建META-INF\spring.factories文件,文件里面将新建的实现类的类路径配置进去,对应的key是org.springframework.boot.SpringApplicationRunListener;
  • SpringApplicationRunListener属于应用程序启动层面的监听器,在springboot启动时候,调用run方法进行反射加载初始化。此时上下文还没有加载,如果通过@Compnant是起不了作用的.

到此这篇关于Spring中的监听器SpringApplicationRunListener详解的文章就介绍到这了,更多相关Spring的SpringApplicationRunListener内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中StringBuilder字符串类型的操作方法及API整理

    Java中StringBuilder字符串类型的操作方法及API整理

    Java中的StringBuffer类继承于AbstractStringBuilder,用来创建非线程安全的字符串类型对象,下面即是对Java中StringBuilder字符串类型的操作方法及API整理
    2016-05-05
  • HttpClient 在Java项目中的使用详解

    HttpClient 在Java项目中的使用详解

    HttpClient作为访问Http服务的客户端访问程序已经被广泛使用,提高了开发效率,也提高了代码的健壮性。因此熟练掌握HttpClient是必需的,关于httpclient感兴趣的朋友可以参考本篇文章
    2015-10-10
  • Java中的@PostConstruct注解的使用

    Java中的@PostConstruct注解的使用

    本文主要介绍了Java中的@PostConstruct注解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 使用SpringBoot根据配置注入接口的不同实现类(代码演示)

    使用SpringBoot根据配置注入接口的不同实现类(代码演示)

    使用springboot开发时经常用到@Autowired和@Resource进行依赖注入,但是当我们一个接口对应多个不同的实现类的时候如果不进行一下配置项目启动时就会报错,那么怎么根据不同的需求注入不同的类型呢,感兴趣的朋友一起看看吧
    2022-06-06
  • java定义受限制的类型参数操作

    java定义受限制的类型参数操作

    这篇文章主要介绍了java定义受限制的类型参数操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • Java UUID 五个版本的区别及使用场景小结

    Java UUID 五个版本的区别及使用场景小结

    在Java中,UUID是一个128位的唯一标识符,广泛应用于生成唯一标识符、分布式系统唯一键等场景,Java提供的java.util.UUID类支持五种UUID版本,每种具有不同的生成方式和使用场景,本文就来介绍一下如何使用,感兴趣的可以了解一下
    2024-11-11
  • java实现二叉树的创建及5种遍历方法(总结)

    java实现二叉树的创建及5种遍历方法(总结)

    下面小编就为大家带来一篇java实现二叉树的创建及5种遍历方法(总结)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • java实现收藏名言语句台词的app

    java实现收藏名言语句台词的app

    本文给大家分享的是使用java制作的记录名人名言台词等等让你难忘的语句的APP的代码,非常的实用,有需要的小伙伴可以参考下。
    2015-04-04
  • SpringBoot中@Conditional注解的使用

    SpringBoot中@Conditional注解的使用

    这篇文章主要介绍了SpringBoot中@Conditional注解的使用,@Conditional注解是一个条件装配注解,主要用于限制@Bean注解在什么时候才生效,以指定的条件形式控制bean的创建,需要的朋友可以参考下
    2024-01-01
  • springboot2.x集成swagger的方法示例

    springboot2.x集成swagger的方法示例

    这篇文章主要介绍了springboot2.x集成swagger的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05

最新评论