• SpringBoot 监听机制


    SpringBoot 监听机制

    SpringBoot 在项目启动时,会对几个监听器进行回调,我们可以实现这些监听器接口,在项目启动时完成 一些操作

    • ApplicationContextInitializer
    • SpringApplicationRunListener
    • CommandLineRunner
    • ApplicationRunner

    新建项目工程

    创建类

    MyApplicationContextInitializer

    package com.xiang.listener;
    
    import org.springframework.context.ApplicationContextInitializer;
    import org.springframework.context.ConfigurableApplicationContext;
    import org.springframework.stereotype.Component;
    
    /**
     * Created by IntelliJ IDEA.
     * User: xiang
     * Date: 2021/10/25 21:05
     */
    @Component
    public class MyApplicationContextInitializer implements ApplicationContextInitializer {
        @Override
        public void initialize(ConfigurableApplicationContext applicationContext) {
    
            System.out.println("ApplicationContextInitializer.............. initialize()");
        }
    }
    
    

    MyApplicationRunner

    package com.xiang.listener;
    
    import org.springframework.boot.ApplicationArguments;
    import org.springframework.boot.ApplicationRunner;
    import org.springframework.stereotype.Component;
    
    import java.util.Arrays;
    
    /**
     * Created by IntelliJ IDEA.
     * User: xiang
     * Date: 2021/10/25 21:08
     */
    @Component
    public class MyApplicationRunner implements ApplicationRunner {
        @Override
        public void run(ApplicationArguments args) throws Exception {
            System.out.println("ApplicationRunner.........run");
            System.out.println("Arrays.asList(args.getSourceArgs())------->"+Arrays.asList(args.getSourceArgs()));
        }
    }
    
    

    MyCommandLineRunner

    package com.xiang.listener;
    
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.stereotype.Component;
    
    import java.util.Arrays;
    
    /**
     * Created by IntelliJ IDEA.
     * User: xiang
     * Date: 2021/10/25 21:08
     */
    @Component
    public class MyCommandLineRunner implements CommandLineRunner {
        @Override
        public void run(String... args) throws Exception {
            System.out.println("CommandLineRunner....run");
            System.out.println("Arrays.asList(args)--------->"+Arrays.asList(args));
        }
    }
    
    

    MySpringApplicationRunListener

    package com.xiang.listener;
    
    import org.springframework.boot.ConfigurableBootstrapContext;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.SpringApplicationRunListener;
    import org.springframework.context.ConfigurableApplicationContext;
    import org.springframework.core.env.ConfigurableEnvironment;
    import org.springframework.stereotype.Component;
    
    /**
     * Created by IntelliJ IDEA.
     * User: xiang
     * Date: 2021/10/25 21:06
     */
    //@Component
    public class MySpringApplicationRunListener implements SpringApplicationRunListener {
    
        public MySpringApplicationRunListener(SpringApplication application,String[] args) {
        }
    
        /**
         * springBoot 启动时会触发不同的事件;
         *
         * @param bootstrapContext
         */
    
    
        @Override
        public void starting(ConfigurableBootstrapContext bootstrapContext) {
            SpringApplicationRunListener.super.starting(bootstrapContext);
            System.out.println("starting..... 项目启动中");
        }
    
        @Override
        public void environmentPrepared(ConfigurableBootstrapContext bootstrapContext, ConfigurableEnvironment environment) {
            SpringApplicationRunListener.super.environmentPrepared(bootstrapContext, environment);
            System.out.println("environmentPrepared..... 环境对象开始准备");
        }
    
        @Override
        public void environmentPrepared(ConfigurableEnvironment environment) {
            SpringApplicationRunListener.super.environmentPrepared(environment);
            System.out.println("environmentPrepared..... 环境对象开始准备.........");
        }
    
        @Override
        public void contextPrepared(ConfigurableApplicationContext context) {
            SpringApplicationRunListener.super.contextPrepared(context);
            System.out.println("contextPrepared..... 上下文对象开始准备");
        }
    
        @Override
        public void contextLoaded(ConfigurableApplicationContext context) {
            SpringApplicationRunListener.super.contextLoaded(context);
            System.out.println("contextLoaded..... 上下文对象开始加载");
        }
    
        @Override
        public void started(ConfigurableApplicationContext context) {
            SpringApplicationRunListener.super.started(context);
            System.out.println("started..... 上下文对象加载完成");
        }
    
        @Override
        public void running(ConfigurableApplicationContext context) {
            SpringApplicationRunListener.super.running(context);
            System.out.println("running..... 项目启动完成,开始运行");
        }
    
        @Override
        public void failed(ConfigurableApplicationContext context, Throwable exception) {
            SpringApplicationRunListener.super.failed(context, exception);
            System.out.println("failed..... 项目启动失败");
        }
    }
    
    

    新建META-INF/spring.factories

    org.springframework.context.ApplicationContextInitializer=
      com.xiang.listener.MyApplicationContextInitializer
    org.springframework.boot.SpringApplicationRunListener=
      com.xiang.listener.MySpringApplicationRunListener
    

    运行主程序 测试 SpringBootListenerApplication

    package com.xiang;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class SpringBootListenerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringBootListenerApplication.class, args);
            /**
             * 控制台只走了 两个
             * ApplicationRunner.........run
             * CommandLineRunner....run
             */
        }
    
    }
    
    

    运行结果

    starting..... 项目启动中
    environmentPrepared..... 环境对象开始准备.........
    environmentPrepared..... 环境对象开始准备
    
      .   ____          _            __ _ _
     /\ / ___'_ __ _ _(_)_ __  __ _    
    ( ( )\___ | '_ | '_| | '_ / _` |    
     \/  ___)| |_)| | | | | || (_| |  ) ) ) )
      '  |____| .__|_| |_|_| |_\__, | / / / /
     =========|_|==============|___/=/_/_/_/
     :: Spring Boot ::                (v2.5.6)
    
    ApplicationContextInitializer.............. initialize()
    contextPrepared..... 上下文对象开始准备
    2021-10-25 22:39:56.188  INFO 15652 --- [           main] com.xiang.SpringBootListenerApplication  : Starting SpringBootListenerApplication using Java 1.8.0_281 on DESKTOP-6K7C1EJ with PID 15652 (D:ComprehensiveTraining	rainingspringBootDemospring-boot-listener	argetclasses started by Xiang in D:ComprehensiveTraining	rainingspringBootDemo)
    2021-10-25 22:39:56.193  INFO 15652 --- [           main] com.xiang.SpringBootListenerApplication  : No active profile set, falling back to default profiles: default
    contextLoaded..... 上下文对象开始加载
    2021-10-25 22:39:57.209  INFO 15652 --- [           main] com.xiang.SpringBootListenerApplication  : Started SpringBootListenerApplication in 1.842 seconds (JVM running for 3.343)
    started..... 上下文对象加载完成
    ApplicationRunner.........run
    Arrays.asList(args.getSourceArgs())------->[]
    CommandLineRunner....run
    Arrays.asList(args)--------->[]
    running..... 项目启动完成,开始运行
    
    Process finished with exit code 0
    
    
  • 相关阅读:
    如何判断栈的增长方向
    时间复杂度
    shell基础part3
    shell基础part2
    shell基础part2
    linux基础part5
    linux基础part4
    linux基础part3
    linux基础part2
    shell基础part1
  • 原文地址:https://www.cnblogs.com/d534/p/15463688.html
Copyright © 2020-2023  润新知