42、扩展原理-ApplicationListener原理
2024-08-27 08:49:14
42、扩展原理-ApplicationListener原理
- 有三个事件
- ContextRefreshedEvent、Test_Ext$1[source=我发布了一个事件]、ContextClosedEvent
- ContextRefreshedEvent事件:
- 容器创建对象:refresh();
- finishRefresh();容器刷新完成会发布ContextRefreshedEvent事件
- 自己发布事件;
- 容器关闭会发布ContextClosedEvent;
【事件发布流程】:
publishEvent(new ContextRefreshedEvent(this));
1)、获取事件的多播器(派发器):getApplicationEventMulticaster()
2)、multicastEvent派发事件:
3)、获取到所有的ApplicationListener;
for (final ApplicationListener<?> listener : getApplicationListeners(event, type)) {
如果有Executor,可以支持使用Executor进行异步派发;
Executor executor = getTaskExecutor();
否则,同步的方式直接执行listener方法;invokeListener(listener, event);
- 拿到listener回调onApplicationEvent方法;
【事件多播器(派发器)】:
1)、容器创建对象:refresh();
2)、initApplicationEventMulticaster();初始化ApplicationEventMulticaster;
先去容器中找有没有id=“applicationEventMulticaster”的组件;
如果没有
this.applicationEventMulticaster = new SimpleApplicationEventMulticaster(beanFactory);
并且加入到容器中,我们就可以在其他组件要派发事件,自动注入这个applicationEventMulticaster;
【容器中有哪些监听器】:
1)、容器创建对象:refresh();
2)、registerListeners();
// 从容器中拿到所有的监听器,把他们注册到applicationEventMulticaster中;
String[] listenerBeanNames = getBeanNamesForType(ApplicationListener.class, true, false);
// 将listener注册到ApplicationEventMulticaster中
getApplicationEventMulticaster().addApplicationListenerBean(listenerBeanName);
最新文章
- 记一次.NET代码重构
- Windows Server 2012 中80端口被PID为4的系统进程占用解决方法
- (原创)mybaits学习三,springMVC和mybatis融合
- ivqBlog 开源博客 (angularjs + express + mongodb)
- android 学习随笔一(配置调试与基础)
- 中南大学第一届长沙地区程序设计邀请赛 New Sorting Algorithm
- C# virtual和override
- DIV 清除样式浮动万能代码
- MFS学习总结
- 从零开始学Xamarin.Forms(四) Android 准备步骤(添加第三方Xamarin.Forms.Labs库)
- Nagios监控lvs服务
- pychon - selenium2Libray源码简介
- python中的slice用法
- 创建以mybatis为基础的web项目(1)
- RISC-V踩坑记----__builtin_clz((x)库函数的应用
- Redis使用和部分源码剖析以及Django缓存和redis的关系
- PL/SQL学习笔记之事务
- 使用Aspose.Cells生成Excel的线型图表
- Spring Advice
- navicat和 plsql 连接oracle数据库 总结
热门文章
- PAT(B) 1083 是否存在相等的差(Java)统计
- vue+iview+mock模拟数据遍历
- 2.33模型--去除字符串两头空格.c
- hdu 6562 Lovers (线段树)
- Spring Cloud Alibaba学习笔记(13) - Spring Cloud Stream的监控与异常处理
- linux 命令行 光标移动技巧等
- github新建远程仓库初始化记录
- iOS - 基础知识总结(OC版) 面试必看 再不看就要用swift了
- OpenStack kilo版(3) Nova部署
- python中read()、readline()、readlines()区别