org.springframework.context.event
Class AbstractApplicationEventMulticaster

public class AbstractApplicationEventMulticaster
implements ApplicationEventMulticaster
Abstract implementation of the 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.

Note that this class doesn't try to do anything clever to ensure thread safety if listeners are added or removed at runtime. A technique such as Copy-on-Write (Lea:137) could be used to ensure this, but the assumption in the basic version of the class is that listeners will be added at application configuration time and not added or removed as the application runs.

A custom collection class must be specified to allow for thread-safe runtime registration of listeners. A good candidate for this is Doug Lea's java.util.concurrent.CopyOnWriteArraySet or its non-JDK predecessor, EDU.oswego.cs.dl.util.concurrent.CopyOnWriteArraySet (or the respective CopyOnWriteArrayList version, allowing for registering the same listener multiple times). Those classes provide a thread-safe Iterator, optimized for read-mostly usage - matching this use case nicely.

Implementing ApplicationEventMulticaster's actual multicastEvent method is left to subclasses. SimpleApplicationEventMulticaster simply multicasts all events to all registered listeners, invoking them in the calling thread. Alternative implementations could me more sophisticated in those respects.

Since1.2.3
VersionNot specified.
AuthorJuergen Hoeller
Wiki javadoc Use textile entry format.
Add your comments here.
Method Summary
void addApplicationListener( ApplicationListener listener )
No description provided.
protected Collection getApplicationListeners()
Return the current Collection of ApplicationListeners.
void removeAllListeners()
No description provided.
void removeApplicationListener( ApplicationListener listener )
No description provided.
void setCollectionClass( Class collectionClass )
Specify the collection class to use.
Methods inherited from org.springframework.context.eventApplicationEventMulticaster
AbstractApplicationEventMulticaster
public AbstractApplicationEventMulticaster ( )
No description provided.
Wiki javadoc Use textile entry format.
Add your comments here.
addApplicationListener
public void addApplicationListener ( ApplicationListener listener )
No description provided.
Implements method in ApplicationEventMulticaster
Parameters
TypeNameDescription
ApplicationListener listener No description provided.
Returns void No description provided.
Wiki javadoc Use textile entry format.
Add your comments here.
getApplicationListeners
protected Collection getApplicationListeners ( )
Return the current Collection of ApplicationListeners.

Note that this is the raw Collection of ApplicationListeners, potentially modified when new listeners get registered or existing ones get removed. This Collection is not a snapshot copy.

Wiki javadoc Use textile entry format.
Add your comments here.
removeAllListeners
public void removeAllListeners ( )
No description provided.
Implements method in ApplicationEventMulticaster
Returns void No description provided.
Wiki javadoc Use textile entry format.
Add your comments here.
removeApplicationListener
public void removeApplicationListener ( ApplicationListener listener )
No description provided.
Implements method in ApplicationEventMulticaster
Parameters
TypeNameDescription
ApplicationListener listener No description provided.
Returns void No description provided.
Wiki javadoc Use textile entry format.
Add your comments here.
setCollectionClass
public void setCollectionClass ( Class collectionClass )
Specify the collection class to use. Can be populated with a fully qualified class name when defined in a Spring application context.

Default is a linked HashSet, keeping the registration order. If no linked Set implementation is available, a plain HashSet will be used as fallback (not keeping the registration order).

Note that a Set class specified will not permit multiple instances of the same listener, while a List class woill allow for registering the same listener multiple times.

Consider Doug Lea's java.util.concurrent.CopyOnWriteArraySet or its non-JDK predecessor, EDU.oswego.cs.dl.util.concurrent.CopyOnWriteArraySet (or the respective CopyOnWriteArrayList version). Those classes provide a thread-safe Iterator, optimized for read-mostly usage - matching this use case nicely.

Parameters
TypeNameDescription
Class collectionClass No description provided.
Returns void No description provided.
Wiki javadoc Use textile entry format.
Add your comments here.