@ -59,24 +59,39 @@ public abstract class AbstractApplicationEventMulticaster implements Application
@@ -59,24 +59,39 @@ public abstract class AbstractApplicationEventMulticaster implements Application
public void addApplicationListener ( ApplicationListener listener ) {
this . defaultRetriever . applicationListeners . add ( listener ) ;
synchronized ( this . defaultRetriever ) {
this . defaultRetriever . applicationListeners . add ( listener ) ;
this . retrieverCache . clear ( ) ;
}
}
public void addApplicationListenerBean ( String listenerBeanName ) {
this . defaultRetriever . applicationListenerBeans . add ( listenerBeanName ) ;
synchronized ( this . defaultRetriever ) {
this . defaultRetriever . applicationListenerBeans . add ( listenerBeanName ) ;
this . retrieverCache . clear ( ) ;
}
}
public void removeApplicationListener ( ApplicationListener listener ) {
this . defaultRetriever . applicationListeners . remove ( listener ) ;
synchronized ( this . defaultRetriever ) {
this . defaultRetriever . applicationListeners . remove ( listener ) ;
this . retrieverCache . clear ( ) ;
}
}
public void removeApplicationListenerBean ( String listenerBeanName ) {
this . defaultRetriever . applicationListenerBeans . remove ( listenerBeanName ) ;
synchronized ( this . defaultRetriever ) {
this . defaultRetriever . applicationListenerBeans . remove ( listenerBeanName ) ;
this . retrieverCache . clear ( ) ;
}
}
public void removeAllListeners ( ) {
this . defaultRetriever . applicationListeners . clear ( ) ;
this . defaultRetriever . applicationListenerBeans . clear ( ) ;
synchronized ( this . defaultRetriever ) {
this . defaultRetriever . applicationListeners . clear ( ) ;
this . defaultRetriever . applicationListenerBeans . clear ( ) ;
this . retrieverCache . clear ( ) ;
}
}
public final void setBeanFactory ( BeanFactory beanFactory ) {
@ -120,24 +135,26 @@ public abstract class AbstractApplicationEventMulticaster implements Application
@@ -120,24 +135,26 @@ public abstract class AbstractApplicationEventMulticaster implements Application
else {
retriever = new ListenerRetriever ( ) ;
LinkedList < ApplicationListener > allListeners = new LinkedList < ApplicationListener > ( ) ;
for ( ApplicationListener listener : this . defaultRetriever . applicationListeners ) {
if ( supportsEvent ( listener , eventType , sourceType ) ) {
retriever . applicationListeners . add ( listener ) ;
allListeners . add ( listener ) ;
}
}
if ( ! this . defaultRetriever . applicationListenerBeans . isEmpty ( ) ) {
BeanFactory beanFactory = getBeanFactory ( ) ;
for ( String listenerBeanName : this . defaultRetriever . applicationListenerBeans ) {
ApplicationListener listener = beanFactory . getBean ( listenerBeanName , ApplicationListener . class ) ;
synchronized ( this . defaultRetriever ) {
for ( ApplicationListener listener : this . defaultRetriever . applicationListeners ) {
if ( supportsEvent ( listener , eventType , sourceType ) ) {
retriever . applicationListenerBean s . add ( listenerBeanName ) ;
retriever . applicationListeners . add ( listener ) ;
allListeners . add ( listener ) ;
}
}
if ( ! this . defaultRetriever . applicationListenerBeans . isEmpty ( ) ) {
BeanFactory beanFactory = getBeanFactory ( ) ;
for ( String listenerBeanName : this . defaultRetriever . applicationListenerBeans ) {
ApplicationListener listener = beanFactory . getBean ( listenerBeanName , ApplicationListener . class ) ;
if ( supportsEvent ( listener , eventType , sourceType ) ) {
retriever . applicationListenerBeans . add ( listenerBeanName ) ;
allListeners . add ( listener ) ;
}
}
OrderComparator . sort ( allListeners ) ;
this . retrieverCache . put ( cacheKey , retriever ) ;
}
}
OrderComparator . sort ( allListeners ) ;
this . retrieverCache . put ( cacheKey , retriever ) ;
return allListeners ;
}
}