Nacos源码系列

nacos 源码解析系列(四)

2020-07-16  本文已影响0人  逗逼程序员
Nacos中使用的监听扩展接口

SpringApplicationRunListener

SpringApplicationRunListener 接口的作用主要就是在Spring Boot 启动初始化的过程中可以通过SpringApplicationRunListener接口回调来让用户在启动的各个流程中可以加入自己的逻辑。

它也是 观察者模式,Spring为我们提供了这个监听器的扩展接口;它监听的就是SpringBoot启动初始化中下面的各个事件

SpringBoot启动过程的关键事件(按照触发顺序)包括:

  1. 开始启动
  2. Environment构建完成
  3. ApplicationContext构建完成
  4. ApplicationContext完成加载
  5. ApplicationContext完成刷新并启动
  6. 启动完成
  7. 启动失败
public interface SpringApplicationRunListener {
    //run()方法执行时,该方法立即被调用,用于初始化早期做一些事情
    void starting();
    //当environment构建完成,ApplicationContext创建之前,该方法被调用
    void environmentPrepared(ConfigurableEnvironment environment);
     //当ApplicationContext构建完成时,该方法被调用
    void contextPrepared(ConfigurableApplicationContext context);
    //在ApplicationContext完成加载,但没有被刷新前,该方法被调用
    void contextLoaded(ConfigurableApplicationContext context);
    //在ApplicationContext刷新并启动后,CommandLineRunners和ApplicationRunner未被调用前,该方法被调用
    void started(ConfigurableApplicationContext context);
    //在run()方法执行完成前该方法被调用
    void running(ConfigurableApplicationContext context);
    //当应用运行出错时该方法被调用
    void failed(ConfigurableApplicationContext context, Throwable exception);    
    
}

下面让我们来首先自定义一个 ApplicationRunListener 看下流程:

首先定义:HelloApplicationRunListener.class 实现SpringApplicationRunListener接口

public class HelloApplicationRunListener implements SpringApplicationRunListener {

    public HelloApplicationRunListener(SpringApplication application, String[] args) {
        System.out.println("constructor");
    }

    @Override
    public void starting() {
        System.out.println("starting......");
    }

    @Override
    public void environmentPrepared(ConfigurableEnvironment environment) {
        System.out.println("environmentPrepared......");
    }

    @Override
    public void contextPrepared(ConfigurableApplicationContext context) {
        System.out.println("contextPrepared......");
    }

    @Override
    public void contextLoaded(ConfigurableApplicationContext context) {
        System.out.println("contextLoaded......");
    }

    @Override
    public void started(ConfigurableApplicationContext context) {
        System.out.println("started......");
    }

    @Override
    public void running(ConfigurableApplicationContext context) {
        System.out.println("running......");
    }

    @Override
    public void failed(ConfigurableApplicationContext context, Throwable exception) {
        System.out.println("failed......");
    }
}
其中注意:必须包含一个构造函数!!

再次加入spring.factories

org.springframework.boot.SpringApplicationRunListener= com.io.nacos.nacosdemo.controller.listener.HelloApplicationRunListener

最后启动项目,可以看到打印出来的信息。

对比 nacos 源码 你可以看到 nacos 实现SpringApplicationRunListener 做了哪些

配置工作~~

上一篇下一篇

猜你喜欢

热点阅读