前言
Spring 从 3.x
开始支持事件机制。在 Spring 的事件机制中,我们可以令一个事件类继承 ApplicationEvent
类,然后将实现了 ApplicationListener
的 Bean
注册到 spring 容器,最后向 ApplicationEventPublisher
推送事件对象即可令所有订阅者收到事件。在 4.2
以后,甚至不需要实现 ApplicationListener
接口,仅需在 Bean
中方法标记 @EventListener
注解即可。
笔者将基于 Spring 源码的 5.2.x
分支,分析该功能是如何实现的。
本文是其中的第一篇文章,将分析广播器与监听的是如何被初始化,并完成注解流程的。
在开始前,推荐先阅读前文了解 Spring 容器的初始化过程与 BeanFactory
中 Bean
的创建,如果可能,还可以了解一点 Spring 的注解机制,这将更有利于流程与一些代码的理解。
相关文章:
一、广播器的创建
在前文,我们知道容器的初始化是通过 AbstractApplicationContext.refresh()
方法完成的,事件机制的相关组件同样也离不开容器,因此事件系统的初始化也通过该方法完成。
AbstractApplicationContext.initApplicationEventMulticaster()
是第一步,它的作用很简单: