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