- 初始化器ApplicationContextInitializer
- 监听器ApplicationListener
- Runner: Runner的一般应用场景就是资源释放清理或者做注册中心, 因为执行到Runner的时候项目已经启动完毕了, 这个时候可以注册进注册中心。
文章目录
- 1.初始化器ApplicationContextInitializer
- 2.监听器ApplicationListener
- 3.callRunners
1.初始化器ApplicationContextInitializer

setXxxx() 一个是设置初始化器, 一个是设置监听器。

通过Spring SPI的方式查找这个类型的实现类。



public class MyApplicationContextInitializer implements ApplicationContextInitializer {
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
System.out.println("MyApplicationContextInitializer");
}
}
发现自己创建的ApplicationContextInitializer已经注册上来了。

调用了run()方法中的prepareContext()方法中的applyInitializers()方法, 在这个方法中for循环的调用各个初始化器的initialize()方法。


2.监听器ApplicationListener
ApplicationEventMulticaster发布事件, Listener监听事件。
定义了两个监听器, 为Started和Starting。

通过Spring SPI的方式查找这个类型的实现类。



public class MyStartedApplicationListener implements ApplicationListener<ApplicationStartedEvent> {
@Override
public void onApplicationEvent(ApplicationStartedEvent event) {
System.out.println("MyStartedApplicationListener");
}
}
public class MyStartingApplicationListener implements ApplicationListener<ApplicationStartingEvent> {
@Override
public void onApplicationEvent(ApplicationStartingEvent event) {
System.out.println("MyStartingApplicationListener");
}
}

SpringApplication run()方法的listeners.starting()开始进去发送ApplicationStartingEvent广播事件, 由我们自己编写的事件监听器接收到。


3.callRunners

ApplicationRunner和CommandLineRunner。
Runner的一般应用场景就是资源释放清理或者做注册中心, 因为执行到Runner的时候项目已经启动完毕了, 这个时候可以注册进注册中心。


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






![[RootersCTF2019]I_<3_Flask](https://img-blog.csdnimg.cn/direct/df40927f9f2e42c58635ec1f21fcc520.png)













