我是靠谱客的博主 震动大白,最近开发中收集的这篇文章主要介绍SpringApplicationRunListener详解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

    • SpringApplicationRunListenerde 作用
    • 再次源码分析
    • 方法详解
    • 具体使用
    • 注意事项

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-INFspring.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-INFspring.factories文件,文件里面将新建的实现类的类路径配置进去,对应的key是org.springframework.boot.SpringApplicationRunListener;

  • SpringApplicationRunListener属于应用程序启动层面的监听器,在springboot启动时候,调用run方法进行反射加载初始化。此时上下文还没有加载,如果通过@Compnant是起不了作用的.

最后

以上就是震动大白为你收集整理的SpringApplicationRunListener详解的全部内容,希望文章能够帮你解决SpringApplicationRunListener详解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部