“Yeah It’s on. ”
SpringBoot 监听机制
Java 监听机制
SpringBoot的监听机制,其实就是对Java提供的事件监听机制的封装。
Java中的事件监听机制定义了以下几个角色:
1、事件:Event,继承java.util.EventObject类对象
2、事件源:Source,任意对象Object
3、监听器:Listener,实现java.util.EventListener接口的对象
SpringBoot 监听机制
SpringBoot在项目启动时,会对几个监听器进行回调,我们可以实现这些监听器接口,在项目启动时完成一些操作。
1
2
3
4
5
6
7
8
9
//ApplicationContextInitializer
@Component
public class MyApplicationContextlnitializer implements ApplicationContextInitializer{
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
System.out.println("ApplicationContextInitializer....initialize run");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
//SpringApplicationRunListener
@Component
public class MySpringApplicationRunListener implements SpringApplicationRunListener {
@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 started(ConfigurableApplicationContext context) {
SpringApplicationRunListener.super.started(context);
}
@Override
public void ready(ConfigurableApplicationContext context, Duration timeTaken) {
System.out.println("ready");
}
@Override
public void running(ConfigurableApplicationContext context) {
SpringApplicationRunListener.super.running(context);
}
@Override
public void failed(ConfigurableApplicationContext context, Throwable exception) {
System.out.println("failed");
}
}
1
2
3
4
5
6
7
8
9
10
//CommandLineRunner
@Component
public class MyCommandLineRunner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("CommandLineRunner...run");
}
}
1
2
3
4
5
6
7
8
9
//ApplicationRunner
@Component
public class MyApplicationRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("ApplicationRunner...run");
}
}

实验说明,只有最后两个被执行了
原因:SpringApplicationRunListener、ApplicationContextInitializer还需要进一步配置
在resources下新建META-INF/spring.factories

ApplicationContextInitializer成功运行
SpringApplicationRunListener报错 非法参数异常
MySpringApplicationRunListener加构造方法
1
2
3
public MySpringApplicationRunListener(SpringApplication application, String[] args){
}
最终运行效果
