容器启动事件监听机制

传送门:12.SpringBoot启动配置原理

容器启动事件监听机制

配置在META-INF/spring.factories文件中

ApplicationContextInitializer
SpringApplicationRunListener

放在IOC容器中

ApplicationRunner
CommandLineRunner

ApplicationContextInitializer

import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;

/**
 * 自定义初始化组件
 *
 */
public class CustomApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
    @Override
    public void initialize(ConfigurableApplicationContext applicationContext) {
        System.out.println("CustomApplicationContextInitializer####" + applicationContext.getApplicationName());
    }
}

SpringApplicationRunListener

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

/**
 * 自定义容器监听器组件
 *
 */
public class CustomSpringApplicationRunListener implements SpringApplicationRunListener {

    //构造器必须要有
    public CustomSpringApplicationRunListener(SpringApplication application, String[] args) {
    }

    /**
     * 开始创建容器
     */
    @Override
    public void starting() {
        System.out.println("CustomSpringApplicationRunListener###starting");
    }

    /**
     * 准备环境
     *
     * @param environment
     */
    @Override
    public void environmentPrepared(ConfigurableEnvironment environment) {
        System.out.println("CustomSpringApplicationRunListener###environmentPrepared:" + environment.getSystemProperties().get("os.name"));
    }

    /**
     * 容器准备完成
     *
     * @param context
     */
    @Override
    public void contextPrepared(ConfigurableApplicationContext context) {
        System.out.println("CustomSpringApplicationRunListener###contextPrepared:" + context.getApplicationName());
    }

    /**
     * 容器环境加载完成
     *
     * @param context
     */
    @Override
    public void contextLoaded(ConfigurableApplicationContext context) {
        System.out.println("CustomSpringApplicationRunListener###contextLoaded");
    }

    /**
     * 容器创建结束
     *
     * @param context
     * @param exception
     */
    @Override
    public void finished(ConfigurableApplicationContext context, Throwable exception) {
		System.out.println("CustomSpringApplicationRunListener###finished");
    }
}

ApplicationRunner

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

/**
 * 
 * 
 */
@Component
public class CustomApplicationRunner implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("CustomApplicationRunner###");
    }
}

CommandLineRunner

import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

/**
 * 
 * 
 */
@Component
public class CustomCommandLineRunner implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        System.out.println("CustomCommandLineRunner###");
    }
}

控制台启动流程:

posted @ 2023-03-12 16:15  Lz_蚂蚱  阅读(69)  评论(0)    收藏  举报