Skip to content

Commit ca0ce7d

Browse files
committed
AbstractApplicationEventMulticaster pre-sorts singleton listeners
Issue: SPR-17307 (cherry picked from commit 9063e66)
1 parent fc2f3ec commit ca0ce7d

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed

spring-context/src/main/java/org/springframework/context/event/AbstractApplicationEventMulticaster.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,12 @@ private Collection<ApplicationListener<?>> retrieveApplicationListeners(
239239
beanFactory.getBean(listenerBeanName, ApplicationListener.class);
240240
if (!allListeners.contains(listener) && supportsEvent(listener, eventType, sourceType)) {
241241
if (retriever != null) {
242-
retriever.applicationListenerBeans.add(listenerBeanName);
242+
if (beanFactory.isSingleton(listenerBeanName)) {
243+
retriever.applicationListeners.add(listener);
244+
}
245+
else {
246+
retriever.applicationListenerBeans.add(listenerBeanName);
247+
}
243248
}
244249
allListeners.add(listener);
245250
}
@@ -252,6 +257,10 @@ private Collection<ApplicationListener<?>> retrieveApplicationListeners(
252257
}
253258
}
254259
AnnotationAwareOrderComparator.sort(allListeners);
260+
if (retriever != null && retriever.applicationListenerBeans.isEmpty()) {
261+
retriever.applicationListeners.clear();
262+
retriever.applicationListeners.addAll(allListeners);
263+
}
255264
return allListeners;
256265
}
257266

@@ -385,7 +394,9 @@ public Collection<ApplicationListener<?>> getApplicationListeners() {
385394
}
386395
}
387396
}
388-
AnnotationAwareOrderComparator.sort(allListeners);
397+
if (!this.preFiltered || !this.applicationListenerBeans.isEmpty()) {
398+
AnnotationAwareOrderComparator.sort(allListeners);
399+
}
389400
return allListeners;
390401
}
391402
}

0 commit comments

Comments
 (0)