From 6e418fe43d91d8f8dec426fe9b2370ff6e4ca130 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Thu, 31 Oct 2013 13:40:05 +0100 Subject: [PATCH] QualifierAnnotationAutowireCandidateResolver matches regular bean name for FactoryBean dependency type as well --- .../beans/factory/config/BeanDefinitionHolder.java | 6 ++++-- .../ConfigurationClassPostProcessorTests.java | 11 +++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/config/BeanDefinitionHolder.java b/spring-beans/src/main/java/org/springframework/beans/factory/config/BeanDefinitionHolder.java index 0f8148f0607..6e10d7573a1 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/config/BeanDefinitionHolder.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/config/BeanDefinitionHolder.java @@ -17,6 +17,7 @@ package org.springframework.beans.factory.config; import org.springframework.beans.BeanMetadataElement; +import org.springframework.beans.factory.BeanFactoryUtils; import org.springframework.util.Assert; import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; @@ -118,8 +119,9 @@ public class BeanDefinitionHolder implements BeanMetadataElement { * or the aliases stored in this bean definition. */ public boolean matchesName(String candidateName) { - return (candidateName != null && - (candidateName.equals(this.beanName) || ObjectUtils.containsElement(this.aliases, candidateName))); + return (candidateName != null && (candidateName.equals(this.beanName) || + candidateName.equals(BeanFactoryUtils.transformedBeanName(this.beanName)) || + ObjectUtils.containsElement(this.aliases, candidateName))); } diff --git a/spring-context/src/test/java/org/springframework/context/annotation/ConfigurationClassPostProcessorTests.java b/spring-context/src/test/java/org/springframework/context/annotation/ConfigurationClassPostProcessorTests.java index baedc6a8198..d4de8de1e5a 100644 --- a/spring-context/src/test/java/org/springframework/context/annotation/ConfigurationClassPostProcessorTests.java +++ b/spring-context/src/test/java/org/springframework/context/annotation/ConfigurationClassPostProcessorTests.java @@ -22,6 +22,7 @@ import org.junit.Test; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.QualifierAnnotationAutowireCandidateResolver; import org.springframework.beans.factory.support.ChildBeanDefinition; import org.springframework.beans.factory.support.DefaultListableBeanFactory; @@ -193,6 +194,8 @@ public class ConfigurationClassPostProcessorTests { RepositoryFactoryBeanInjectionBean bean = (RepositoryFactoryBeanInjectionBean) beanFactory.getBean("annotatedBean"); assertSame(beanFactory.getBean("&repoFactoryBean"), bean.repositoryFactoryBean); + assertSame(beanFactory.getBean("&repoFactoryBean"), bean.qualifiedRepositoryFactoryBean); + assertSame(beanFactory.getBean("&repoFactoryBean"), bean.prefixQualifiedRepositoryFactoryBean); } @Test @@ -323,6 +326,14 @@ public class ConfigurationClassPostProcessorTests { @Autowired public RepositoryFactoryBean repositoryFactoryBean; + + @Autowired + @Qualifier("repoFactoryBean") + public RepositoryFactoryBean qualifiedRepositoryFactoryBean; + + @Autowired + @Qualifier("&repoFactoryBean") + public RepositoryFactoryBean prefixQualifiedRepositoryFactoryBean; }