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
-
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
, e.g.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, 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
, e.g. 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, e.g. 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
-