Skip to content

Commit 7d44c7c

Browse files
committed
QualifierAnnotationAutowireCandidateResolver calls BeanFactory.getType defensively
Issue: SPR-12191 (cherry picked from commit 73ce3b5)
1 parent be89612 commit 7d44c7c

File tree

1 file changed

+11
-5
lines changed

1 file changed

+11
-5
lines changed

spring-beans/src/main/java/org/springframework/beans/factory/annotation/QualifierAnnotationAutowireCandidateResolver.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.springframework.beans.TypeConverter;
2727
import org.springframework.beans.factory.BeanFactory;
2828
import org.springframework.beans.factory.BeanFactoryAware;
29+
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
2930
import org.springframework.beans.factory.config.BeanDefinition;
3031
import org.springframework.beans.factory.config.BeanDefinitionHolder;
3132
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
@@ -72,8 +73,8 @@ public class QualifierAnnotationAutowireCandidateResolver implements AutowireCan
7273
public QualifierAnnotationAutowireCandidateResolver() {
7374
this.qualifierTypes.add(Qualifier.class);
7475
try {
75-
this.qualifierTypes.add((Class<? extends Annotation>)
76-
ClassUtils.forName("javax.inject.Qualifier", QualifierAnnotationAutowireCandidateResolver.class.getClassLoader()));
76+
this.qualifierTypes.add((Class<? extends Annotation>) ClassUtils.forName("javax.inject.Qualifier",
77+
QualifierAnnotationAutowireCandidateResolver.class.getClassLoader()));
7778
}
7879
catch (ClassNotFoundException ex) {
7980
// JSR-330 API not available - simply skip.
@@ -246,9 +247,14 @@ protected boolean checkQualifier(
246247
if (targetAnnotation == null) {
247248
// Look for matching annotation on the target class
248249
if (this.beanFactory != null) {
249-
Class<?> beanType = this.beanFactory.getType(bdHolder.getBeanName());
250-
if (beanType != null) {
251-
targetAnnotation = AnnotationUtils.getAnnotation(ClassUtils.getUserClass(beanType), type);
250+
try {
251+
Class<?> beanType = this.beanFactory.getType(bdHolder.getBeanName());
252+
if (beanType != null) {
253+
targetAnnotation = AnnotationUtils.getAnnotation(ClassUtils.getUserClass(beanType), type);
254+
}
255+
}
256+
catch (NoSuchBeanDefinitionException ex) {
257+
// Not the usual case - simply forget about the type check...
252258
}
253259
}
254260
if (targetAnnotation == null && bd.hasBeanClass()) {

0 commit comments

Comments
 (0)