开发者学堂课程【SpringBoot快速掌握 - 核心技术:事件监听机制相关测试】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/612/detail/9282
事件监听机制相关测试
下面是几个重要的事件回调机制
1.创建 ApplicationContextlnitializer
首先创建 listener,将所有实现类创建在内,再创建HelloApplicationContextlnitializer 接口类,再实现ApplicationContextlnitializer,这里的泛型是 ConfigurableApplicationContext,再添加为实现的方法,这里有一个初始化方法,直接运行打印,测试代码模块如下:
package com. atguigu. springboot. listener;
import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;
public class HelloApplicationContextInitializer implements ApplicationContextInitializer{
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
System.out.println("ApplicationContextInitializer...initialize..."+applicationContext);
2.实现 SpringApplicationRunListener 类接口:
添加实现方法,SpringApplicationRunListener 是在 ioc 容器未创建前调用 start,当基础环境准备好后调用 environmentPrepared, 当 ioc 的 Context 准备好后调用 contextPrepared,当 contextPrepared 整个运行完后调用所有的 contextLoaded,所有加载完后最后调用 finished,代码测试模块如下:
…
public class HelloSpringApplicationRunListener implements SpringApplicationRunListener {
@Override
public void starting() {
//监听容器的开始
System.out.println("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...");// contextLoaded
加载完成
}
@Override
public void finished(ConfigurableApplicationContext context, Throwable exception) {
//创建完成
System.out.println("SpringApplicationRunListener...finished...");}}
3.实现 ApplicationRunner 类接口
添加实现方法,有一个 run 方法,测试模块代码如下:
package com.atguigu.springboot.listener;
import org.springframework.boot.Applicat ionArguments;
import org.springframework.boot.ApplicationRunner ;
import org.springframework.stereotype.Component;
@Component
public class HelloApplicationRunner implements Applicati onRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("ApplicationRunner...run....");
}
}
4.实现 CommandLineRunner 类接口
添加实现方法,也有一个 run 方法,只不过是通过 args 实现的,测试模块代码如下:
package com.atguigu.springboot.listener;
import org .springframework.boot.CommandLineRunner;
import java.util.Arrays;
@Component
public class HelloCommandLineRunner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("CommandLineRunner...run..."+ Arrays.asList(args));
}
}
写好后要作用的话需要配置,所以 ApplicationContextlnitializer,SpringApplicationRunListener 需要配置在 META-INF/spring.factories,需要配置的在个人原来的类路径下新建 META-INF 文件夹,文件夹下新建 spring.factories ,具体配置可以参考自动配置包下面的 spring.factories ,配置如下:
org.springframework.context.ApplicationContextInitializer=\
com.atguigu.springboot.listener.HelloApplicationContextInitializer
org.springframework.boot.SpringApplicationRunListener=\
com.atguigu.springboot.listener.HelloSpringApplicationRunListener
此时还需向 SpringApplicationRunListener 中写入有参构造器如下:
public HelloSpringApplicationRunListener(SpringApplication application, String[] args){
}
而 ApplicationRunner,CommandLineRunner 只需要放在 ioc 容器中,所有容器中的需要再增加 @Component 注解
最后成功运行。