Spring监听器-spring源码详解(五)
上篇文章说了:
前面介绍了springIOC在上面那个方法里实现,那么下面这个方法里实现了什么呢?在springBean创建完之后的扩展代码。
contextRefreshEvent事件监听上下文初始化方法。
当我们想在容器结束的时候进行扩展,就可以写一个监听器,监听contextClosedEvent事件。
监听事件可以通过@component基于接口实现applicationListener,泛型传入需要监听的事件。
也可以通过注解,@EventListener(事件)
Spring事件监听器有三个部分组成:
事件(applicationEvent):事件一发布。
监听器(applicationListener):观察者 则监听到 ,做一些事。
事件发布器(applicationEventMulticaster):发布事件。
从第一个方法里可以看到,这里把容器激活,因为在后面getBean方法的时候,会断言容器必须是激活状态,才会执行初始化bean。
这里有一个早期监听器,不需要手动调用publicEvet。
ClassPathXmlApplicationContext在这里就会通过loadBeanDefinitions来加载bean。
AnnocationApplicationContext在这里则是设置了序列化id。
下面则开始对bean工厂进行填充,这里注册了加载器,
注册了applicationContextAwareProcessor。
这里会在beanPostProcessorBeforeInitialization调用。
这里还注册了applicationContext、beanFactory等。
后面则就注册了事件监听的后置处理器ApplicationlistenerDetector解析(接口监听器)。
监听器则是在beanPostProcessorAtferInitialization调用。
后面这里就到了事件多播器,当自己自己定义了applicationEventMulticaster的时候,则就创建。
没有则创建一个simpleApplicationEventMulticaster。
当调用publicEvent的时候,则就会调用事件多播器去广播所有事件。这里会管理所有的监听器。
在后面一张图就是 registerListeners。
这里getBeanNamesForType是注解的方式获取 监听器,接口的方式则获取不到。
现获取早期事件,这里将早期的时间赋值null,则没有早期事件了。也就不会自动广播了,全部通过多播器广播。
于是最后就到了我们文章开头发的publicEvent。
相关文章
- 听说,3D ToF传感器将成研发主流!
- markdown语法简介
- 让typecho支持table of contents
- 正则表达式教程
- 记一次bypy的使用
- bad interpreter 没有那个文件或目录
- vim入门
- 软件版本总结
- 安装Scarpy踩过的坑
- centos国内源总结
- 图解高效神经网络结构搜索(ENAS)
- 浅谈气象服务需求
- 重复建设
- Room Arranger for mac(简单易用的室内设计软件)v9.7.2中文激活版
- 给客户的定心丸——产品检验报告
- 从“互联网人”的视角看气象服务
- 全国各区域“两个细则”对风光功率预测考核要求的比较
- “盘古”再现,“江湖”不宁
- 气象部门有哪些是公益二类事业单位
- 驻场气象局工作 领悟客户服务思维