ApplicationEventMulticaster接口

2022-07-28  本文已影响0人  engineer_tang

由对象实现的接口,这些对象可以管理许多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
上一篇 下一篇

猜你喜欢

热点阅读