扩展原理——ApplicationListener

一、ApplicationListener应用监听器

通过监听容器中发布的事件,事件驱动模型开发。监听ApplicationEvent及其下面的子事件
在这里插入图片描述
当容器中发布此事件之后,onApplicationEvent()方法会被触发

二、基于事件开发的步骤

写一个监听器实现ApplicationListener接口来监听某个事件,并把监听器加入到容器中,只要容器中有相关事件的发布,就可以监听到这个事件
在这里插入图片描述
调用publishEvent()方法发布事件
在这里插入图片描述
测试
在这里插入图片描述

三、监听器原理

ContextRefreshedEvent事件

首先创建容器对象,调用refresh()方法刷新容器
在这里插入图片描述
容器刷新的最后一步,调用finishRefresh()方法
在这里插入图片描述
容器刷新完成,调用finishRefresh()方法里面的publishEvent()方法来发布ContextRefreshedEvent容器刷新完成的事件
在这里插入图片描述

事件发布的流程如下:

首先调用getApplicationEventMulticaster()方法获取事件的多播器(派发器),发送给多个监听器,让他们能够同时感知到这个事件
在这里插入图片描述
然后调用multicastEvent()方法,获取所有的监听器,遍历执行监听器的方法。如果获取到Executor就可以使用Executor进行异步派发,否则同步的方式执行invokeListener()方法
在这里插入图片描述
invokeListener()方法进一步调用doInvokeListener()方法
在这里插入图片描述
回调当前监听器的onApplicationEvent(event)
在这里插入图片描述
触发自定义的onApplicationEvent()方法在这里插入图片描述
打印收到的容器刷新完成的事件
在这里插入图片描述

自定义的发布事件

执行完容器刷新的事件,程序执行到了自定义的发布事件,然后打印publishEvent()方法执行与上述相同的流程
在这里插入图片描述
打印收到的自定义发布的事件
在这里插入图片描述

ContextClosedEvent事件

最后程序执行到容器关闭流程
在这里插入图片描述
close()方法进一步调用doClose()方法
在这里插入图片描述
doClose()方法会调用publishEvent()方法发布容器关闭的事件
在这里插入图片描述
事件的发布流程与上述一致

最后打印收到的容器关闭事件
在这里插入图片描述

三、事件多播器(派发器)

容器创建对象时,会调用refresh()方法刷新容器。refresh()方法中会调用initApplicationEventMulticaster()初始化ApplicationEventMulticaster
在这里插入图片描述
initApplicationEventMulticaster()会先去容器中找idapplicationEventMulticaster的组件,如果找到就获取这个组件,如果没有找到就会创建一个SimpleApplicationEventMulticaster类型的多播器并注册到容器中,这样在其它组件需要派发事件时,会自动注入这个创建的applicationEventMulticaster
在这里插入图片描述

四、获取容器中监听器

refresh()方法中会调用registerListeners()方法注册监听器
在这里插入图片描述
registerListeners()方法从容器中获取所有的监听器并添加到多播器中
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值