- 初始化器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");
}
}