nacos 源码解析系列(四)
2020-07-16 本文已影响0人
逗逼程序员
Nacos中使用的监听扩展接口
- SpringApplicationRunListener
- ApplicationListener
SpringApplicationRunListener
SpringApplicationRunListener 接口的作用主要就是在Spring Boot 启动初始化的过程中可以通过SpringApplicationRunListener接口回调来让用户在启动的各个流程中可以加入自己的逻辑。
它也是 观察者模式,Spring为我们提供了这个监听器的扩展接口;它监听的就是SpringBoot启动初始化中下面的各个事件
SpringBoot启动过程的关键事件(按照触发顺序)包括:
- 开始启动
- Environment构建完成
- ApplicationContext构建完成
- ApplicationContext完成加载
- ApplicationContext完成刷新并启动
- 启动完成
- 启动失败
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 做了哪些
配置工作~~