由对象实现的接口,这些对象可以管理许多ApplicationListener对象并向其发布事件。
一个org.springframework.context.ApplicationEventPublisher,通常是org.springframework.context.ApplicationContext可以使用ApplicationEventMulticaster作为实际发布事件的委托。
接口定义如下:
public interface ApplicationEventMulticaster {
void addApplicationListener(ApplicationListener<?> listener);
void addApplicationListenerBean(String listenerBeanName);
void removeApplicationListener(ApplicationListener<?> listener);
void removeApplicationListenerBean(String listenerBeanName);
void removeAllListeners();
void multicastEvent(ApplicationEvent event);
void multicastEvent(ApplicationEvent event, @Nullable ResolvableType eventType);
}
1. 方法说明
1.1 addApplicationListener方法
添加一个侦听器以通知所有事件。
1.2 addApplicationListenerBean方法
添加一个侦听器bean以通知所有事件。
1.3 removeApplicationListener方法
从通知列表中删除侦听器。
1.4 removeApplicationListenerBean方法
从通知列表中删除侦听器bean。
1.5 removeAllListeners方法
删除在此multicaster注册的所有侦听器。
在remove调用之后,在注册新的侦听器之前,multicaster不会对事件通知执行任何操作。
1.6 multicastEvent方法
将给定的应用程序事件多播到适当的侦听器。
如果可能,考虑使用multicastEvent(ApplicationEvent,ResolvableType),因为它可以更好地支持基于泛型的事件。
2. 抽象类之AbstractApplicationEventMulticaster
类图如下:
image.png
ApplicationEventMulticaster接口的抽象实现,提供了基本的侦听器注册工具。
默认情况下不允许同一侦听器的多个实例,因为它将侦听器保留在链接集中。用于保存ApplicationListener对象的集合类可以通过“collectionClass”bean属性重写。
实现ApplicationEventMulticaster的实际multicastEvent方法留给子类。SimpleApplicationEventMulticaster简单地将所有事件多路广播到所有注册的侦听器,并在调用线程中调用它们。在这些方面,替代实现可能更复杂。
3. 实现类之SimpleApplicationEventMulticaster
类图如下:
image.png
网友评论