Class AbstractApplicationEventMulticaster
- All Implemented Interfaces:
Aware,BeanClassLoaderAware,BeanFactoryAware,ApplicationEventMulticaster
- Direct Known Subclasses:
SimpleApplicationEventMulticaster
ApplicationEventMulticaster interface,
providing the basic listener registration facility.
Doesn't permit multiple instances of the same listener by default, as it keeps listeners in a linked Set. The collection class used to hold ApplicationListener objects can be overridden through the "collectionClass" bean property.
Implementing ApplicationEventMulticaster's actual ApplicationEventMulticaster.multicastEvent(org.springframework.context.ApplicationEvent) method
is left to subclasses. SimpleApplicationEventMulticaster simply multicasts
all events to all registered listeners, invoking them in the calling thread.
Alternative implementations could be more sophisticated in those respects.
- Since:
- 1.2.3
- Author:
- Juergen Hoeller, Stephane Nicoll
- See Also:
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidaddApplicationListener(ApplicationListener<?> listener) Add a listener to be notified of all events.voidaddApplicationListenerBean(String listenerBeanName) Add a listener bean to be notified of all events.protected Collection<ApplicationListener<?>>Return a Collection containing all ApplicationListeners.protected Collection<ApplicationListener<?>>getApplicationListeners(ApplicationEvent event, ResolvableType eventType) Return a Collection of ApplicationListeners matching the given event type.voidRemove all listeners registered with this multicaster.voidremoveApplicationListener(ApplicationListener<?> listener) Remove a listener from the notification list.voidremoveApplicationListenerBean(String listenerBeanName) Remove a listener bean from the notification list.voidremoveApplicationListenerBeans(Predicate<String> predicate) Remove all matching listener beans from the set of registered listener bean names (referring to bean classes which in turn implement theApplicationListenerinterface directly).voidremoveApplicationListeners(Predicate<ApplicationListener<?>> predicate) Remove all matching listeners from the set of registeredApplicationListenerinstances (which includes adapter classes such asApplicationListenerMethodAdapter, e.g.voidsetBeanClassLoader(ClassLoader classLoader) Callback that supplies the beanclass loaderto a bean instance.voidsetBeanFactory(BeanFactory beanFactory) Callback that supplies the owning factory to a bean instance.protected booleansupportsEvent(Class<?> listenerType, ResolvableType eventType) Filter a listener early through checking its generically declared event type before trying to instantiate it.protected booleansupportsEvent(ApplicationListener<?> listener, ResolvableType eventType, Class<?> sourceType) Determine whether the given listener supports the given event.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.springframework.context.event.ApplicationEventMulticaster
multicastEvent, multicastEvent
-
Constructor Details
-
AbstractApplicationEventMulticaster
public AbstractApplicationEventMulticaster()
-
-
Method Details
-
setBeanClassLoader
Description copied from interface:BeanClassLoaderAwareCallback that supplies the beanclass loaderto a bean instance.Invoked after the population of normal bean properties but before an initialization callback such as
InitializingBean'sInitializingBean.afterPropertiesSet()method or a custom init-method.- Specified by:
setBeanClassLoaderin interfaceBeanClassLoaderAware- Parameters:
classLoader- the owning class loader
-
setBeanFactory
Description copied from interface:BeanFactoryAwareCallback that supplies the owning factory to a bean instance.Invoked after the population of normal bean properties but before an initialization callback such as
InitializingBean.afterPropertiesSet()or a custom init-method.- Specified by:
setBeanFactoryin interfaceBeanFactoryAware- Parameters:
beanFactory- owning BeanFactory (nevernull). The bean can immediately call methods on the factory.- See Also:
-
addApplicationListener
Description copied from interface:ApplicationEventMulticasterAdd a listener to be notified of all events.- Specified by:
addApplicationListenerin interfaceApplicationEventMulticaster- Parameters:
listener- the listener to add- See Also:
-
addApplicationListenerBean
Description copied from interface:ApplicationEventMulticasterAdd a listener bean to be notified of all events.- Specified by:
addApplicationListenerBeanin interfaceApplicationEventMulticaster- Parameters:
listenerBeanName- the name of the listener bean to add- See Also:
-
removeApplicationListener
Description copied from interface:ApplicationEventMulticasterRemove a listener from the notification list.- Specified by:
removeApplicationListenerin interfaceApplicationEventMulticaster- Parameters:
listener- the listener to remove- See Also:
-
removeApplicationListenerBean
Description copied from interface:ApplicationEventMulticasterRemove a listener bean from the notification list.- Specified by:
removeApplicationListenerBeanin interfaceApplicationEventMulticaster- Parameters:
listenerBeanName- the name of the listener bean to remove- See Also:
-
removeApplicationListeners
Description copied from interface:ApplicationEventMulticasterRemove all matching listeners from the set of registeredApplicationListenerinstances (which includes adapter classes such asApplicationListenerMethodAdapter, e.g. for annotatedEventListenermethods).Note: This just applies to instance registrations, not to listeners registered by bean name.
- Specified by:
removeApplicationListenersin interfaceApplicationEventMulticaster- Parameters:
predicate- the predicate to identify listener instances to remove, e.g. checkingSmartApplicationListener.getListenerId()- See Also:
-
removeApplicationListenerBeans
Description copied from interface:ApplicationEventMulticasterRemove all matching listener beans from the set of registered listener bean names (referring to bean classes which in turn implement theApplicationListenerinterface directly).Note: This just applies to bean name registrations, not to programmatically registered
ApplicationListenerinstances.- Specified by:
removeApplicationListenerBeansin interfaceApplicationEventMulticaster- Parameters:
predicate- the predicate to identify listener bean names to remove- See Also:
-
removeAllListeners
public void removeAllListeners()Description copied from interface:ApplicationEventMulticasterRemove all listeners registered with this multicaster.After a remove call, the multicaster will perform no action on event notification until new listeners are registered.
- Specified by:
removeAllListenersin interfaceApplicationEventMulticaster- See Also:
-
getApplicationListeners
Return a Collection containing all ApplicationListeners.- Returns:
- a Collection of ApplicationListeners
- See Also:
-
getApplicationListeners
protected Collection<ApplicationListener<?>> getApplicationListeners(ApplicationEvent event, ResolvableType eventType) Return a Collection of ApplicationListeners matching the given event type. Non-matching listeners get excluded early.- Parameters:
event- the event to be propagated. Allows for excluding non-matching listeners early, based on cached matching information.eventType- the event type- Returns:
- a Collection of ApplicationListeners
- See Also:
-
supportsEvent
Filter a listener early through checking its generically declared event type before trying to instantiate it.If this method returns
truefor a given listener as a first pass, the listener instance will get retrieved and fully evaluated through asupportsEvent(ApplicationListener, ResolvableType, Class)call afterwards.- Parameters:
listenerType- the listener's type as determined by the BeanFactoryeventType- the event type to check- Returns:
- whether the given listener should be included in the candidates for the given event type
-
supportsEvent
protected boolean supportsEvent(ApplicationListener<?> listener, ResolvableType eventType, @Nullable Class<?> sourceType) Determine whether the given listener supports the given event.The default implementation detects the
SmartApplicationListenerandGenericApplicationListenerinterfaces. In case of a standardApplicationListener, aGenericApplicationListenerAdapterwill be used to introspect the generically declared type of the target listener.- Parameters:
listener- the target listener to checkeventType- the event type to check againstsourceType- the source type to check against- Returns:
- whether the given listener should be included in the candidates for the given event type
-