Class AbstractApplicationEventMulticaster
- java.lang.Object
- org.springframework.context.event.AbstractApplicationEventMulticaster
- All Implemented Interfaces:
Aware,BeanClassLoaderAware,BeanFactoryAware,ApplicationEventMulticaster
- Direct Known Subclasses:
SimpleApplicationEventMulticaster
public abstract class AbstractApplicationEventMulticaster extends Object implements ApplicationEventMulticaster, BeanClassLoaderAware, BeanFactoryAware
Abstract implementation of theApplicationEventMulticasterinterface, 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.SimpleApplicationEventMulticastersimply 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:
getApplicationListeners(ApplicationEvent, ResolvableType),SimpleApplicationEventMulticaster
Constructor Summary
Constructors Constructor Description AbstractApplicationEventMulticaster()
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddApplicationListener(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<?>>getApplicationListeners()Return a Collection containing all ApplicationListeners.protected Collection<ApplicationListener<?>>getApplicationListeners(ApplicationEvent event, ResolvableType eventType)Return a Collection of ApplicationListeners matching the given event type.voidremoveAllListeners()Remove 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.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, wait
Methods inherited from interface org.springframework.context.event.ApplicationEventMulticaster
multicastEvent, multicastEvent
Constructor Detail
AbstractApplicationEventMulticaster
public AbstractApplicationEventMulticaster()
Method Detail
setBeanClassLoader
public void setBeanClassLoader(ClassLoader classLoader)
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; may benullin which case a defaultClassLoadermust be used, for example theClassLoaderobtained viaClassUtils.getDefaultClassLoader()
setBeanFactory
public void setBeanFactory(BeanFactory beanFactory)
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:
BeanInitializationException
addApplicationListener
public void addApplicationListener(ApplicationListener<?> listener)
Description copied from interface:ApplicationEventMulticasterAdd a listener to be notified of all events.- Specified by:
addApplicationListenerin interfaceApplicationEventMulticaster- Parameters:
listener- the listener to add
addApplicationListenerBean
public void addApplicationListenerBean(String listenerBeanName)
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
removeApplicationListener
public void removeApplicationListener(ApplicationListener<?> listener)
Description copied from interface:ApplicationEventMulticasterRemove a listener from the notification list.- Specified by:
removeApplicationListenerin interfaceApplicationEventMulticaster- Parameters:
listener- the listener to remove
removeApplicationListenerBean
public void removeApplicationListenerBean(String listenerBeanName)
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 add
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 being registered.
- Specified by:
removeAllListenersin interfaceApplicationEventMulticaster
getApplicationListeners
protected Collection<ApplicationListener<?>> getApplicationListeners()
Return a Collection containing all ApplicationListeners.- Returns:
- a Collection of ApplicationListeners
- See Also:
ApplicationListener
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:
ApplicationListener
supportsEvent
protected boolean supportsEvent(Class<?> listenerType, ResolvableType eventType)
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, 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