源码地址:https://github.com/spring-projects/spring-framework
仓库地址:https://gitcode.net/qq_42665745/spring/-/tree/10-event-listener
发布、监听事件
核心类:
- ApplicationEvent:这个类是所有事件的基类,提供事件的基本功能。
- ApplicationContextEvent:所有与ApplicationContext相关的事件都必须继承自这个类。例如,ContextRefreshedEvent和ContextClosedEvent。
- ApplicationEventPublisher:提供发布事件的功能。任何Spring容器中的bean都可以通过实现这个接口来发布事件。
- ApplicationListener:所有的事件监听器都必须实现ApplicationListener接口
- ApplicationEventMulticaster:定义了事件广播器的基本功能。它负责将事件广播给所有注册的监听器
- AbstractApplicationEventMulticaster:提供了事件广播的基本功能。它处理监听器的注册和注销,并提供事件广播的基础实现。
- SimpleApplicationEventMulticaster:提供了一个简单的事件广播机制,可以同步或异步地通知监听器。
- ContextRefreshedEvent:当ApplicationContext初始化或刷新时发布这个事件。
- ContextClosedEvent:当ApplicationContext关闭时发布这个事件
流程:
1.初始化:ApplicationContext上下文初始化时,初始化事件广播器,并注册事件监听器
2.使用:
- 发布事件:通过调用ApplicationContext.publishEvent()方法发布事件
- 事件广播:ApplicationContext会委托给ApplicationEventMulticaster来广播事件
- 事件传播:ApplicationEventMulticaster将事件传递给所有注册的监听器,获取到对这个事件感兴趣的监听器的监听器集合
- 事件处理:监听器集合依次调用ApplicationListener的onApplicationEvent方法处理事件
isAssignableFrom和instanceof比较:
1.isAssignableFrom:比较Class对象,用于判断某个类是否是另一个类的超类或接口
例:大.isAssignableFrom(小),true
2.instanceof:比较实例对象,用于判断一个类是否是另一个类的实例或子类实例
例:小.instanceof(大),true