美文网首页Nacos源码系列
nacos 源码解析系列(四)

nacos 源码解析系列(四)

作者: 逗逼程序员 | 来源:发表于2020-07-16 11:31 被阅读0次
    Nacos中使用的监听扩展接口
    • SpringApplicationRunListener
    • ApplicationListener

    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 做了哪些

    配置工作~~

    相关文章

      网友评论

        本文标题:nacos 源码解析系列(四)

        本文链接:https://www.haomeiwen.com/subject/avhphktx.html