吃透Spring源码(六):spring事件通知机制源码解析
一,Spring事件机制
Spring 中的事件通知机制就是观察者模式的一种实现。观察者是 ApplicationListener,可以实现接口定义观察者,也可以使用注解@EventListener定义观察者。观察者感兴趣的是某种状态的变化,这种状态变化使用 ApplicationEvent 来传达,也就是事件对象。我们说的 Spring 中的事件,就是 ApplicationEvent。在事件中,被观察者可以认为是发出事件的一方,只有在状态变化时才发布事件。当有状态发生变化时,发布者调用 ApplicationEventPublisher 的 publishEvent 方法发布一个事件,Spring 容器广播事件给符合条件的观察者,调用观察者的 onApplicationEvent 方法把事件对象传递给观察者。
1,ApplicationEvent(事件源)
Spring 框架提供了四种容器事件,包含了整个容器的生命周期。

- ContextStartedEvent:ApplicationContext 启动事件;
- ContextRefreshedEvent:ApplicationContext 更新事件;
- ContextStoppedEvent:ApplicationContext 停止事件;
- ContextClosedEvent:ApplicationContext 关闭事件。
Spring 4.2 之前的版本,事件必须继承 ApplicationEvent,从 Spring 4.2 版开始,框架提供了 PayloadApplicationEvent 用于包装任意类型,不强制事件对象继承 ApplicationEvent。当我们发送一个任意类型的事件对象时,框架内部自动包装为 PayloadApplicationEvent 事件对象。