SpringBoot 监听机制

SpringBoot 监听机制

Java 监听机制

SpringBoot 的监听机制,其实是对Java提供的事件监听机制的封装。 Java中的事件监听机制定义了以下几个角色:

1、事件:Event,继承 java.util.EventObject 类的对象

2、事件源:Source ,任意对象Object

3、监听器:Listener,实现 java.util.EventListener 接口 的对象

SpringBoot 监听机制

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

ApplicationContextInitializer、SpringApplicationRunListener、CommandLineRunner、ApplicationRunner

MyApplicationContextInitializer.java 实现ApplicationContextInitializer接口

package com.qingbo.listener;

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

/**
 * @Description: TODO
 * @author: ShiQingBo
 * @date: 2021年11月24日 13:46
 */
@Component
public class MyApplicationContextInitializer implements ApplicationContextInitializer {
    
    
    @Override
    public void initialize(ConfigurableApplicationContext applicationContext) {
    
    
        System.out.println("ApplicationContextInitializer......initialize");
    }
}

MySpringApplicationRunListener.jva实现SpringApplicationRunListener接口

package com.qingbo.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 java.time.Duration;

/**
 * @Description: TODO
 * @author: ShiQingBo
 * @date: 2021年11月24日 13:49
 */

public class MySpringApplicationRunListener implements SpringApplicationRunListener  {
    
    

    public MySpringApplicationRunListener(SpringApplication application, String[] args) {
    
    
    }

    @Override
    public void starting(ConfigurableBootstrapContext bootstrapContext) {
    
    
        System.out.println("starting......项目启动中");
    }

    @Override
    public void environmentPrepared(ConfigurableBootstrapContext bootstrapContext, 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, Duration timeTaken) {
    
    
        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......项目启动失败");
    }
}

MyApplicationRunner.java实现ApplicationRunner接口

package com.qingbo.listener;

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

import java.util.Arrays;

/**
 * @Description: 项目启动后执行run方法,实际应用中可以用来加载缓存等提前得准备操作
 * @author: ShiQingBo
 * @date: 2021年11月24日 14:03
 */
@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()));
    }
}

MyCommandLineRunner.java 实现 CommandLineRunner 接口

package com.qingbo.listener;

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

import java.util.Arrays;

/**
 * @Description: 项目启动后执行run方法,实际应用中可以用来加载缓存等提前得准备操作
 * @author: ShiQingBo
 * @date: 2021年11月24日 14:02
 */
@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));
    }
}

其中 MyApplicationRunner.java 和 MyCommandLineRunner.java 实现以后SpringBoot会自动调用。

其中 MyApplicationContextInitializer.java 和 MySpringApplicationRunListener.java实现以后需要配置,配置完成后SpringBoot才会自动调用

其配置的方法是:
在resources目录下新建一个META-INF文件夹在下面新建一个文件 spring.factories在里面添加配置

org.springframework.context.ApplicationContextInitializer = com.qingbo.listener.MyApplicationContextInitializer

org.springframework.boot.SpringApplicationRunListener = com.qingbo.listener.MySpringApplicationRunListener

猜你喜欢

转载自blog.csdn.net/qingbo_2920249511/article/details/121548080