spring源码学习(七)监听器与监听事件
在spring中监听器与监听事件用到了观察者的设计模式,但是又与简单的观察者模式不同,他分的角色更多,主要是实现解耦的目的
具体执行步骤:
1、事件源发布不同的事件
2、当发布时间之后会调用多播器的方法来进行事件广播,由多播器来触发具体的监听器去执行具体的事件
2、当监听器收到具体的事件之后,可以验证匹配是否能处理当前事件,如果可以处理,那么执行操作;如果不能处理直接跳过
代码实现:
1、准备多个事件,spring里ApplicationEvent有多个子类实现包括我们自定义的事件MyEvent
2、准备好多个监听器,spring中ApplicationListener有多个子类实现,包括我们自定义的MyLisenter
3、初始化多播器initApplicationEventMulticaster()
refresh方法中initApplicationEventMulticaster实现初始化多播器,方法实现很简单:先在beanFactory中找是否存在多播器对象,如果存在什么都不做;如果不存在,则创建一个多播器SimpleApplicationEventMulticaster并注册到beanFactory中
4、向多播器中注册监听器对象registerListeners
如同注册bfpp和bpp一样在从容器中拿到监听器beanNames集合,再依次向多播器中注册
5、准备事件发布,来通知多播器进行相关逻辑处理
事件发布需要由上下文来进行发布,所以在我们自定义的bean中织入了一个上下文对象来进行事件发布,事件处理也很简单,简单打印对象被创建了
发布事件:
1)、拿到多播器,调用多播器的事件处理方法
2)、找到所有的监听器,循环遍历执行
执行结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律