- 初始化器ApplicationContextInitializer
- 监听器ApplicationListener
- Runner: Runner的一般应用场景就是资源释放清理或者做注册中心, 因为执行到Runner的时候项目已经启动完毕了, 这个时候可以注册进注册中心。
文章目录
- 1.初始化器ApplicationContextInitializer
- 2.监听器ApplicationListener
- 3.callRunners
1.初始化器ApplicationContextInitializer
setXxxx() 一个是设置初始化器, 一个是设置监听器。
通过Spring SPI的方式查找这个类型的实现类。
public class MyApplicationContextInitializer implements ApplicationContextInitializer {@Overridepublic 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> {@Overridepublic void onApplicationEvent(ApplicationStartedEvent event) {System.out.println("MyStartedApplicationListener");}
}
public class MyStartingApplicationListener implements ApplicationListener<ApplicationStartingEvent> {@Overridepublic 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 {@Overridepublic void run(ApplicationArguments args) throws Exception {System.out.println("run");}
}