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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with 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 (!containsBeanDefinition(beanName)) {
if (containsSingleton(beanName)) { if (containsSingleton(beanName)) {
return true; return isAutowireCandidate(beanName, new RootBeanDefinition(getType(beanName)), descriptor);
} }
else if (getParentBeanFactory() instanceof ConfigurableListableBeanFactory) { else if (getParentBeanFactory() instanceof ConfigurableListableBeanFactory) {
// No bean definition found in this factory -> delegate to parent. // No bean definition found in this factory -> delegate to parent.
return ((ConfigurableListableBeanFactory) getParentBeanFactory()).isAutowireCandidate(beanName, descriptor); return ((ConfigurableListableBeanFactory) getParentBeanFactory()).isAutowireCandidate(beanName, descriptor);
} }
} }
return isAutowireCandidate(beanName, getMergedLocalBeanDefinition(beanName), descriptor); return isAutowireCandidate(beanName, getMergedLocalBeanDefinition(beanName), descriptor);
} }

View File

@ -41,4 +41,6 @@
</qualifier> </qualifier>
</bean> </bean>
<bean id="testProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"/>
</beans> </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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with 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.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; import java.lang.annotation.Target;
import java.util.Properties;
import org.junit.Test; import org.junit.Test;
import org.springframework.beans.factory.BeanCreationException; import org.springframework.beans.factory.BeanCreationException;
@ -82,6 +83,7 @@ public final class QualifierAnnotationTests {
QualifiedByBeanNameTestBean testBean = (QualifiedByBeanNameTestBean) context.getBean("testBean"); QualifiedByBeanNameTestBean testBean = (QualifiedByBeanNameTestBean) context.getBean("testBean");
Person person = testBean.getLarry(); Person person = testBean.getLarry();
assertEquals("LarryBean", person.getName()); assertEquals("LarryBean", person.getName());
assertTrue(testBean.myProps != null && testBean.myProps.isEmpty());
} }
@Test @Test
@ -192,6 +194,9 @@ public final class QualifierAnnotationTests {
@Autowired @Qualifier("larryBean") @Autowired @Qualifier("larryBean")
private Person larry; private Person larry;
@Autowired @Qualifier("testProperties")
public Properties myProps;
public Person getLarry() { public Person getLarry() {
return larry; return larry;
} }