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 by
default. Alternative implementations could be more sophisticated in those respects.
- Since:
- 1.2.3
- Author:
- Juergen Hoeller, Stephane Nicoll
- See Also:
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
addApplicationListener
(ApplicationListener<?> listener) Add a listener to be notified of all events.void
addApplicationListenerBean
(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.void
Remove all listeners registered with this multicaster.void
removeApplicationListener
(ApplicationListener<?> listener) Remove a listener from the notification list.void
removeApplicationListenerBean
(String listenerBeanName) Remove a listener bean from the notification list.void
removeApplicationListenerBeans
(Predicate<String> predicate) Remove all matching listener beans from the set of registered listener bean names (referring to bean classes which in turn implement theApplicationListener
interface directly).void
removeApplicationListeners
(Predicate<ApplicationListener<?>> predicate) Remove all matching listeners from the set of registeredApplicationListener
instances (which includes adapter classes such asApplicationListenerMethodAdapter
, for example, for annotatedEventListener
methods).void
setBeanClassLoader
(ClassLoader classLoader) Callback that supplies the beanclass loader
to a bean instance.void
setBeanFactory
(BeanFactory beanFactory) Callback that supplies the owning factory to a bean instance.protected boolean
supportsEvent
(Class<?> listenerType, ResolvableType eventType) Filter a listener early through checking its generically declared event type before trying to instantiate it.protected boolean
supportsEvent
(ApplicationListener<?> listener, ResolvableType eventType, @Nullable 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, wait
Methods inherited from interface org.springframework.context.event.ApplicationEventMulticaster
multicastEvent, multicastEvent
-
Constructor Details
-
AbstractApplicationEventMulticaster
public AbstractApplicationEventMulticaster()
-
-
Method Details
-
setBeanClassLoader
Description copied from interface:BeanClassLoaderAware
Callback that supplies the beanclass loader
to a bean instance.Invoked after the population of normal bean properties but before an initialization callback such as
InitializingBean's
InitializingBean.afterPropertiesSet()
method or a custom init-method.- Specified by:
setBeanClassLoader
in interfaceBeanClassLoaderAware
- Parameters:
classLoader
- the owning class loader
-
setBeanFactory
Description copied from interface:BeanFactoryAware
Callback 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:
setBeanFactory
in interfaceBeanFactoryAware
- Parameters:
beanFactory
- owning BeanFactory (nevernull
). The bean can immediately call methods on the factory.- See Also:
-
addApplicationListener
Description copied from interface:ApplicationEventMulticaster
Add a listener to be notified of all events.- Specified by:
addApplicationListener
in interfaceApplicationEventMulticaster
- Parameters:
listener
- the listener to add- See Also:
-
addApplicationListenerBean
Description copied from interface:ApplicationEventMulticaster
Add a listener bean to be notified of all events.- Specified by:
addApplicationListenerBean
in interfaceApplicationEventMulticaster
- Parameters:
listenerBeanName
- the name of the listener bean to add- See Also:
-
removeApplicationListener
Description copied from interface:ApplicationEventMulticaster
Remove a listener from the notification list.- Specified by:
removeApplicationListener
in interfaceApplicationEventMulticaster
- Parameters:
listener
- the listener to remove- See Also:
-
removeApplicationListenerBean
Description copied from interface:ApplicationEventMulticaster
Remove a listener bean from the notification list.- Specified by:
removeApplicationListenerBean
in interfaceApplicationEventMulticaster
- Parameters:
listenerBeanName
- the name of the listener bean to remove- See Also:
-
removeApplicationListeners
Description copied from interface:ApplicationEventMulticaster
Remove all matching listeners from the set of registeredApplicationListener
instances (which includes adapter classes such asApplicationListenerMethodAdapter
, for example, for annotatedEventListener
methods).Note: This just applies to instance registrations, not to listeners registered by bean name.
- Specified by:
removeApplicationListeners
in interfaceApplicationEventMulticaster
- Parameters:
predicate
- the predicate to identify listener instances to remove, for example, checkingSmartApplicationListener.getListenerId()
- See Also:
-
removeApplicationListenerBeans
Description copied from interface:ApplicationEventMulticaster
Remove all matching listener beans from the set of registered listener bean names (referring to bean classes which in turn implement theApplicationListener
interface directly).Note: This just applies to bean name registrations, not to programmatically registered
ApplicationListener
instances.- Specified by:
removeApplicationListenerBeans
in interfaceApplicationEventMulticaster
- Parameters:
predicate
- the predicate to identify listener bean names to remove- See Also:
-
removeAllListeners
public void removeAllListeners()Description copied from interface:ApplicationEventMulticaster
Remove 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:
removeAllListeners
in 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
true
for 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
SmartApplicationListener
andGenericApplicationListener
interfaces. In case of a standardApplicationListener
, aGenericApplicationListenerAdapter
will 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
-