spring boot 监听容器启动代码实例
在使用Spring框架开发时,有时我们需要在spring容器初始化完成后做一些操作,那么我们可以通过自定义ApplicationListener来实现.
自定义监听器
@Component publicclassMyApplicationListenerimplementsApplicationListener{ @Override publicvoidonApplicationEvent(ContextRefreshedEventcontextRefreshedEvent){ //获取spring上下文 ApplicationContextapplicationContext=contextRefreshedEvent.getApplicationContext(); //doyourwork... }
源码分析
springboot启动应用,执行SpringApplication.run(String…args)方法
run方法中执行完初始化上下文方法后,会执行this.refreshContext方法,刷新
经过一堆方法跳转,执行AbstractApplicationContextl类的publishEvent(Objectevent,@NullableResolvableTypeeventType)方法
然后执行SimpleApplicationEventMulticaster.multicastEvent(ApplicationEventevent,@NullableResolvableTypeeventType)
然后依次执行所有监听器的onApplicationEvent()方法
//遍历所有ApplicationListeners,依次执行ApplicationListener的onApplicationEvent()方法 publicvoidmulticastEvent(ApplicationEventevent,@NullableResolvableTypeeventType){ ResolvableTypetype=eventType!=null?eventType:this.resolveDefaultEventType(event); Iteratorvar4=this.getApplicationListeners(event,type).iterator(); while(var4.hasNext()){ ApplicationListener>listener=(ApplicationListener)var4.next(); Executorexecutor=this.getTaskExecutor(); if(executor!=null){ executor.execute(()->{ this.invokeListener(listener,event); }); }else{ this.invokeListener(listener,event); } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。