SpringBoot专栏:巧妙运用SpringBoot的事件监听机制,原来这么重要..

SpringBoot专栏:巧妙运用SpringBoot的事件监听机制,原来这么重要.._第1张图片

前言

SpringBoot涉及了几个比较重要的事件回调机制,巧妙运用给开发者带来不一样的”福利“。

回调:ApplicationContextInitializer、SpringApplicationRunListener、CommandLineRunner、ApplicationRunner

在SpringBoot启动的时候,以上几个回调事件是何时触发的?下面样例中会有详细讲解。

SpringBoot专栏:巧妙运用SpringBoot的事件监听机制,原来这么重要.._第2张图片

哪些场景会用到

1.启动前环境检测?

2.启动时配置初始化?

3.启动后数据初始化?

...

应用的场景很多,可以发挥我们的想象。

事件回调机制

 

代码样例

分别对4个类继承

HelloApplicationContextInitializer

 

SpringBoot专栏:巧妙运用SpringBoot的事件监听机制,原来这么重要.._第3张图片

HelloApplicationRunner
@Component
public class HelloApplicationRunner implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("运行ApplicationRunner:ApplicationRunner...run....");
    }
}

 HelloCommandLineRunner类

@Component
public class HelloCommandLineRunner implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        System.out.println("运行LineRunner:CommandLineRunner...run..."+ Arrays.asList(args));
    }
}
HelloSpringApplicationRunListener类
package com.limp.listerner;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.SpringApplicationRunListener;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.ConfigurableEnvironment;

public class HelloSpringApplicationRunListener implements SpringApplicationRunListener {

    //必须有的构造器
    public HelloSpringApplicationRunListener(SpringApplication application, String[] args){

    }

    @Override
    public void starting() {
        System.out.println("运行RunListener:SpringApplicationRunListener...starting...");
    }

    @Override
    public void environmentPrepared(ConfigurableEnvironment environment) {
        Object o = environment.getSystemProperties().get("os.name");
        System.out.println("获取系统环境:SpringApplicationRunListener...environmentPrepared.."+o);
    }

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

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

    @Override
    public void started(ConfigurableApplicationContext context) {

    }

    @Override
    public void running(ConfigurableApplicationContext context) {

    }

    @Override
    public void failed(ConfigurableApplicationContext context, Throwable exception) {

    }


}

 

注意上面2个类需要META-INF/spring.factories添加如下配置才能生效

org.springframework.context.ApplicationContextInitializer=\
com.limp.listerner.HelloApplicationContextInitializer

org.springframework.boot.SpringApplicationRunListener=\
com.limp.listerner.HelloSpringApplicationRunListener

开始测试

启动应用...运行结果如下

运行RunListener:SpringApplicationRunListener...starting...
获取系统环境:SpringApplicationRunListener...environmentPrepared..Windows 10
.....
运行Initializer:ApplicationContextInitializer...initialize...org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@557cd14f: startup date [Thu Jan 01 08:00:00 CST 1970]; root of context hierarchy

运行ApplicationRunner:ApplicationRunner...run....
运行LineRunner:CommandLineRunner...run...[]

源码地址:

你可能感兴趣的:(Spring,Boot,SpringBoot入门)