From bb05bc7c0154143dee4cf1f8982a5cc6f3cc2df9 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Wed, 25 Nov 2015 15:40:38 +0100 Subject: [PATCH] EventListenerMethodProcessor leniently handles unresolvable bean types Issue: SPR-13712 --- .../event/EventListenerMethodProcessor.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/spring-context/src/main/java/org/springframework/context/event/EventListenerMethodProcessor.java b/spring-context/src/main/java/org/springframework/context/event/EventListenerMethodProcessor.java index 3c73fa4dcd..15779599cd 100644 --- a/spring-context/src/main/java/org/springframework/context/event/EventListenerMethodProcessor.java +++ b/spring-context/src/main/java/org/springframework/context/event/EventListenerMethodProcessor.java @@ -75,7 +75,16 @@ public class EventListenerMethodProcessor implements SmartInitializingSingleton, String[] allBeanNames = this.applicationContext.getBeanNamesForType(Object.class); for (String beanName : allBeanNames) { if (!ScopedProxyUtils.isScopedTarget(beanName)) { - Class type = AutoProxyUtils.determineTargetClass(this.applicationContext.getBeanFactory(), beanName); + Class type = null; + try { + type = AutoProxyUtils.determineTargetClass(this.applicationContext.getBeanFactory(), beanName); + } + catch (Throwable ex) { + // An unresolvable bean type, probably from a lazy bean - let's ignore it. + if (logger.isDebugEnabled()) { + logger.debug("Could not resolve target class for bean with name '" + beanName + "'", ex); + } + } if (type != null) { if (ScopedObject.class.isAssignableFrom(type)) { try { @@ -107,8 +116,7 @@ public class EventListenerMethodProcessor implements SmartInitializingSingleton, * {@link EventListener} annotated methods. */ protected List getEventListenerFactories() { - Map beans = - this.applicationContext.getBeansOfType(EventListenerFactory.class); + Map beans = this.applicationContext.getBeansOfType(EventListenerFactory.class); List allFactories = new ArrayList(beans.values()); AnnotationAwareOrderComparator.sort(allFactories); return allFactories;