Class SimpleApplicationEventMulticaster
- java.lang.Object
- org.springframework.context.event.AbstractApplicationEventMulticaster
- org.springframework.context.event.SimpleApplicationEventMulticaster
- All Implemented Interfaces:
Aware
,BeanClassLoaderAware
,BeanFactoryAware
,ApplicationEventMulticaster
public class SimpleApplicationEventMulticaster extends AbstractApplicationEventMulticaster
Simple implementation of theApplicationEventMulticaster
interface.Multicasts all events to all registered listeners, leaving it up to the listeners to ignore events that they are not interested in. Listeners will usually perform corresponding
instanceof
checks on the passed-in event object.By default, all listeners are invoked in the calling thread. This allows the danger of a rogue listener blocking the entire application, but adds minimal overhead. Specify an alternative task executor to have listeners executed in different threads, for example from a thread pool.
- Author:
- Rod Johnson, Juergen Hoeller, Stephane Nicoll
- See Also:
setTaskExecutor(java.util.concurrent.Executor)
Constructor Summary
Constructors Constructor Description SimpleApplicationEventMulticaster()
Create a new SimpleApplicationEventMulticaster.SimpleApplicationEventMulticaster(BeanFactory beanFactory)
Create a new SimpleApplicationEventMulticaster for the given BeanFactory.
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected ErrorHandler
getErrorHandler()
Return the current error handler for this multicaster.protected Executor
getTaskExecutor()
Return the current task executor for this multicaster.protected void
invokeListener(ApplicationListener<?> listener, ApplicationEvent event)
Invoke the given listener with the given event.void
multicastEvent(ApplicationEvent event)
Multicast the given application event to appropriate listeners.void
multicastEvent(ApplicationEvent event, ResolvableType eventType)
Multicast the given application event to appropriate listeners.void
setErrorHandler(ErrorHandler errorHandler)
Set theErrorHandler
to invoke in case an exception is thrown from a listener.void
setTaskExecutor(Executor taskExecutor)
Set a custom executor (typically aTaskExecutor
) to invoke each listener with.Methods inherited from class org.springframework.context.event.AbstractApplicationEventMulticaster
addApplicationListener, addApplicationListenerBean, getApplicationListeners, getApplicationListeners, removeAllListeners, removeApplicationListener, removeApplicationListenerBean, setBeanClassLoader, setBeanFactory, supportsEvent, supportsEvent
Constructor Detail
SimpleApplicationEventMulticaster
public SimpleApplicationEventMulticaster()
Create a new SimpleApplicationEventMulticaster.
SimpleApplicationEventMulticaster
public SimpleApplicationEventMulticaster(BeanFactory beanFactory)
Create a new SimpleApplicationEventMulticaster for the given BeanFactory.
Method Detail
setTaskExecutor
public void setTaskExecutor(Executor taskExecutor)
Set a custom executor (typically aTaskExecutor
) to invoke each listener with.Default is equivalent to
SyncTaskExecutor
, executing all listeners synchronously in the calling thread.Consider specifying an asynchronous task executor here to not block the caller until all listeners have been executed. However, note that asynchronous execution will not participate in the caller's thread context (class loader, transaction association) unless the TaskExecutor explicitly supports this.
- See Also:
SyncTaskExecutor
,SimpleAsyncTaskExecutor
getTaskExecutor
protected Executor getTaskExecutor()
Return the current task executor for this multicaster.
setErrorHandler
public void setErrorHandler(ErrorHandler errorHandler)
Set theErrorHandler
to invoke in case an exception is thrown from a listener.Default is none, with a listener exception stopping the current multicast and getting propagated to the publisher of the current event. If a task executor is specified, each individual listener exception will get propagated to the executor but won't necessarily stop execution of other listeners.
Consider setting an
ErrorHandler
implementation that catches and logs exceptions (a laTaskUtils.LOG_AND_SUPPRESS_ERROR_HANDLER
) or an implementation that logs exceptions while nevertheless propagating them (e.g.TaskUtils.LOG_AND_PROPAGATE_ERROR_HANDLER
).- Since:
- 4.1
getErrorHandler
protected ErrorHandler getErrorHandler()
Return the current error handler for this multicaster.- Since:
- 4.1
multicastEvent
public void multicastEvent(ApplicationEvent event)
Description copied from interface:ApplicationEventMulticaster
Multicast the given application event to appropriate listeners.Consider using
ApplicationEventMulticaster.multicastEvent(ApplicationEvent, ResolvableType)
if possible as it provides a better support for generics-based events.- Parameters:
event
- the event to multicast
multicastEvent
public void multicastEvent(ApplicationEvent event, ResolvableType eventType)
Description copied from interface:ApplicationEventMulticaster
Multicast the given application event to appropriate listeners.If the
eventType
isnull
, a default type is built based on theevent
instance.- Parameters:
event
- the event to multicasteventType
- the type of event (can be null)
invokeListener
protected void invokeListener(ApplicationListener<?> listener, ApplicationEvent event)
Invoke the given listener with the given event.- Parameters:
listener
- the ApplicationListener to invokeevent
- the current event to propagate- Since:
- 4.1