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实现滑动验证码的示例代码

    Java实现滑动验证码的示例代码

    这篇文章主要为大家介绍了如何用Java语言实现滑动验证码的生成,项目采用了springboot,maven等技术,感兴趣的小伙伴可以跟随小编学习一下
    2022-02-02
  • 举例讲解Java中数组和字符串类型的使用方法

    举例讲解Java中数组和字符串类型的使用方法

    这篇文章主要介绍了举例讲解Java中数组和字符串类型的使用方法,是Java入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • Java中使用异或运算符实现加密字符串

    Java中使用异或运算符实现加密字符串

    这篇文章主要介绍了Java中使用异或运算符实现加密字符串,本文直接给出实现代码,以及运算结果加密实例,需要的朋友可以参考下
    2015-06-06
  • springboot集成tkmapper及基本使用教程

    springboot集成tkmapper及基本使用教程

    tk.mybatis可以节省程序员的大部分时间,对于程序员来说关于一张表的操作无非就是增删改查,tk.mybatis提供了一些基本操作的SQL语句,比如说按表的主键查询、删除等基本操作,我们接下来就来介绍一些springboot集成tkmapper及基本使用
    2022-11-11
  • Java 常用类解析:java异常机制,异常栈,异常处理方式,异常链,异常丢失详解

    Java 常用类解析:java异常机制,异常栈,异常处理方式,异常链,异常丢失详解

    这篇文章主要介绍了Java 常用类解析:java异常机制,异常栈,异常处理方式,异常链,异常丢失详解的相关资料,需要的朋友可以参考下
    2017-03-03
  • 深入剖析Java编程中的序列化

    深入剖析Java编程中的序列化

    这篇文章主要介绍了深入剖析Java编程中的序列化,文中谈到了序列化时对象的继承等各种问题,案例详尽,强烈推荐!需要的朋友可以参考下
    2015-07-07
  • java递归实现树形结构数据完整案例

    java递归实现树形结构数据完整案例

    递归算法的代码比较简洁,可读性较好;但是在实际的业务处理中会出现多次的重复调用,如果处理不好,很容易出现StackOverflowError报错,这篇文章主要给大家介绍了关于java递归实现树形结构数据的相关资料,需要的朋友可以参考下
    2023-04-04
  • 解决J2EE-session在浏览器关闭后失效问题

    解决J2EE-session在浏览器关闭后失效问题

    最近做项目使用的是Spring+SpringMVC+Mybatis框架,maven管理目录的javaweb端系统,对于session的一些问题,在此小编给大家分享到脚本之家平台,需要的朋友参考下吧
    2018-01-01
  • 解析JavaSe的内部类

    解析JavaSe的内部类

    这篇文章主要为大家详细介绍了JavaSe的内部类,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • Mybatis查询记录条数的实例代码

    Mybatis查询记录条数的实例代码

    这篇文章主要介绍了Mybatis查询记录条数的实例代码,需要的朋友可以参考下
    2017-08-08

最新评论