From 73ce3b514b5f8dd2f0985d45c0651e48131326b8 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Wed, 22 Oct 2014 17:04:40 +0200 Subject: [PATCH] QualifierAnnotationAutowireCandidateResolver calls BeanFactory.getType defensively Issue: SPR-12191 --- ...ierAnnotationAutowireCandidateResolver.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/annotation/QualifierAnnotationAutowireCandidateResolver.java b/spring-beans/src/main/java/org/springframework/beans/factory/annotation/QualifierAnnotationAutowireCandidateResolver.java index b2bdd5de1e6..920f2a20157 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/annotation/QualifierAnnotationAutowireCandidateResolver.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/annotation/QualifierAnnotationAutowireCandidateResolver.java @@ -24,6 +24,7 @@ import java.util.Set; import org.springframework.beans.SimpleTypeConverter; import org.springframework.beans.TypeConverter; +import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.beans.factory.config.BeanDefinitionHolder; import org.springframework.beans.factory.config.DependencyDescriptor; import org.springframework.beans.factory.support.AutowireCandidateQualifier; @@ -53,7 +54,7 @@ import org.springframework.util.StringUtils; */ public class QualifierAnnotationAutowireCandidateResolver extends GenericTypeAwareAutowireCandidateResolver { - private final Set> qualifierTypes = new LinkedHashSet>(); + private final Set> qualifierTypes = new LinkedHashSet>(2); private Class valueAnnotationType = Value.class; @@ -67,8 +68,8 @@ public class QualifierAnnotationAutowireCandidateResolver extends GenericTypeAwa public QualifierAnnotationAutowireCandidateResolver() { this.qualifierTypes.add(Qualifier.class); try { - this.qualifierTypes.add((Class) - ClassUtils.forName("javax.inject.Qualifier", QualifierAnnotationAutowireCandidateResolver.class.getClassLoader())); + this.qualifierTypes.add((Class) ClassUtils.forName("javax.inject.Qualifier", + QualifierAnnotationAutowireCandidateResolver.class.getClassLoader())); } catch (ClassNotFoundException ex) { // JSR-330 API not available - simply skip. @@ -233,9 +234,14 @@ public class QualifierAnnotationAutowireCandidateResolver extends GenericTypeAwa if (targetAnnotation == null) { // Look for matching annotation on the target class if (getBeanFactory() != null) { - Class beanType = getBeanFactory().getType(bdHolder.getBeanName()); - if (beanType != null) { - targetAnnotation = AnnotationUtils.getAnnotation(ClassUtils.getUserClass(beanType), type); + try { + Class beanType = getBeanFactory().getType(bdHolder.getBeanName()); + if (beanType != null) { + targetAnnotation = AnnotationUtils.getAnnotation(ClassUtils.getUserClass(beanType), type); + } + } + catch (NoSuchBeanDefinitionException ex) { + // Not the usual case - simply forget about the type check... } } if (targetAnnotation == null && bd.hasBeanClass()) {