registered plain singletons will be fully matched according to their qualifiers; "systemProperties" bean is not considered a default match for type Properties anymore (SPR-5355)

This commit is contained in:
Juergen Hoeller 2009-02-09 22:06:07 +00:00
parent 6086bb37e7
commit 5a04ed502b
3 changed files with 11 additions and 5 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright 2002-2008 the original author or authors.
* Copyright 2002-2009 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -393,14 +393,13 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
if (!containsBeanDefinition(beanName)) {
if (containsSingleton(beanName)) {
return true;
return isAutowireCandidate(beanName, new RootBeanDefinition(getType(beanName)), descriptor);
}
else if (getParentBeanFactory() instanceof ConfigurableListableBeanFactory) {
// No bean definition found in this factory -> delegate to parent.
return ((ConfigurableListableBeanFactory) getParentBeanFactory()).isAutowireCandidate(beanName, descriptor);
}
}
return isAutowireCandidate(beanName, getMergedLocalBeanDefinition(beanName), descriptor);
}

View File

@ -41,4 +41,6 @@
</qualifier>
</bean>
</beans>
<bean id="testProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"/>
</beans>

View File

@ -1,5 +1,5 @@
/*
* Copyright 2002-2008 the original author or authors.
* Copyright 2002-2009 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -24,6 +24,7 @@ import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.Properties;
import org.junit.Test;
import org.springframework.beans.factory.BeanCreationException;
@ -82,6 +83,7 @@ public final class QualifierAnnotationTests {
QualifiedByBeanNameTestBean testBean = (QualifiedByBeanNameTestBean) context.getBean("testBean");
Person person = testBean.getLarry();
assertEquals("LarryBean", person.getName());
assertTrue(testBean.myProps != null && testBean.myProps.isEmpty());
}
@Test
@ -192,6 +194,9 @@ public final class QualifierAnnotationTests {
@Autowired @Qualifier("larryBean")
private Person larry;
@Autowired @Qualifier("testProperties")
public Properties myProps;
public Person getLarry() {
return larry;
}