您的位置:首页 > 编程语言 > Java开发

spring boot 监听容器启动代码实例

2019-10-16 18:07 831 查看

在使用Spring框架开发时, 有时我们需要在spring容器初始化完成后做一些操作, 那么我们可以通过自定义ApplicationListener 来实现.

自定义监听器

@Component
public class MyApplicationListener implements ApplicationListener<ContextRefreshedEvent> {

@Override
public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {

// 获取spring 上下文
ApplicationContext applicationContext = contextRefreshedEvent.getApplicationContext();

// do your work...
}

源码分析

springboot 启动应用, 执行 SpringApplication.run(String… args) 方法

run方法中执行完初始化上下文方法后, 会执行this.refreshContext方法, 刷新

经过一堆方法跳转, 执行 AbstractApplicationContextl类的publishEvent(Object event, @Nullable ResolvableType eventType) 方法

然后执行 SimpleApplicationEventMulticaster.multicastEvent(ApplicationEvent event, @Nullable ResolvableType eventType)

然后依次执行所有监听器的onApplicationEvent()方法

// 遍历所有ApplicationListeners, 依次执行ApplicationListener 的onApplicationEvent()方法
public void multicastEvent(ApplicationEvent event, @Nullable ResolvableType eventType) {
ResolvableType type = eventType != null ? eventType : this.resolveDefaultEventType(event);
Iterator var4 = this.getApplicationListeners(event, type).iterator();

while(var4.hasNext()) {
ApplicationListener<?> listener = (ApplicationListener)var4.next();
Executor executor = this.getTaskExecutor();
if (executor != null) {
executor.execute(() -> {
this.invokeListener(listener, event);
});
} else {
this.invokeListener(listener, event);
}
}

}

以上就是本文的全部内容,希望对大家的学习有所帮助

您可能感兴趣的文章:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息