Transform the beanName in method isPrimary
Transform the beanName in method DefaultListableBeanFactory.isPrimary. Add the corresponding test cases. Fixes #22675.
This commit is contained in:
parent
a11a592734
commit
7b11c3b599
|
|
@ -1603,12 +1603,13 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
|
||||||
* @return whether the given bean qualifies as primary
|
* @return whether the given bean qualifies as primary
|
||||||
*/
|
*/
|
||||||
protected boolean isPrimary(String beanName, Object beanInstance) {
|
protected boolean isPrimary(String beanName, Object beanInstance) {
|
||||||
if (containsBeanDefinition(beanName)) {
|
String transformedBeanName = transformedBeanName(beanName);
|
||||||
return getMergedLocalBeanDefinition(beanName).isPrimary();
|
if (containsBeanDefinition(transformedBeanName)) {
|
||||||
|
return getMergedLocalBeanDefinition(transformedBeanName).isPrimary();
|
||||||
}
|
}
|
||||||
BeanFactory parent = getParentBeanFactory();
|
BeanFactory parent = getParentBeanFactory();
|
||||||
return (parent instanceof DefaultListableBeanFactory &&
|
return (parent instanceof DefaultListableBeanFactory &&
|
||||||
((DefaultListableBeanFactory) parent).isPrimary(beanName, beanInstance));
|
((DefaultListableBeanFactory) parent).isPrimary(transformedBeanName, beanInstance));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -1455,6 +1455,24 @@ public class DefaultListableBeanFactoryTests {
|
||||||
assertFalse(lbf.containsSingleton("bd1"));
|
assertFalse(lbf.containsSingleton("bd1"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetFactoryBeanByTypeWithPrimary() {
|
||||||
|
DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
|
||||||
|
RootBeanDefinition bd1 = new RootBeanDefinition(NullTestBeanFactoryBean.class);
|
||||||
|
RootBeanDefinition bd2 = new RootBeanDefinition(NullTestBeanFactoryBean.class);
|
||||||
|
bd2.setPrimary(true);
|
||||||
|
lbf.registerBeanDefinition("bd1", bd1);
|
||||||
|
lbf.registerBeanDefinition("bd2", bd2);
|
||||||
|
NullTestBeanFactoryBean factoryBeanByType = lbf.getBean(NullTestBeanFactoryBean.class);
|
||||||
|
NullTestBeanFactoryBean bd1FactoryBean = (NullTestBeanFactoryBean)lbf.getBean("&bd1");
|
||||||
|
NullTestBeanFactoryBean bd2FactoryBean = (NullTestBeanFactoryBean)lbf.getBean("&bd2");
|
||||||
|
assertNotNull(factoryBeanByType);
|
||||||
|
assertNotNull(bd1FactoryBean);
|
||||||
|
assertNotNull(bd2FactoryBean);
|
||||||
|
assertNotEquals(factoryBeanByType, bd1FactoryBean);
|
||||||
|
assertEquals(factoryBeanByType, bd2FactoryBean);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetBeanByTypeWithMultiplePrimary() {
|
public void testGetBeanByTypeWithMultiplePrimary() {
|
||||||
DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
|
DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
|
||||||
|
|
@ -1869,6 +1887,24 @@ public class DefaultListableBeanFactoryTests {
|
||||||
factoryBean, bean.getFactoryBean());
|
factoryBean, bean.getFactoryBean());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAutowireBeanWithFactoryBeanByTypeWithPrimary() {
|
||||||
|
DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
|
||||||
|
RootBeanDefinition bd1 = new RootBeanDefinition(LazyInitFactory.class);
|
||||||
|
RootBeanDefinition bd2 = new RootBeanDefinition(LazyInitFactory.class);
|
||||||
|
bd2.setPrimary(true);
|
||||||
|
lbf.registerBeanDefinition("bd1", bd1);
|
||||||
|
lbf.registerBeanDefinition("bd2", bd2);
|
||||||
|
LazyInitFactory bd1FactoryBean = (LazyInitFactory) lbf.getBean("&bd1");
|
||||||
|
LazyInitFactory bd2FactoryBean = (LazyInitFactory) lbf.getBean("&bd2");
|
||||||
|
assertNotNull(bd1FactoryBean);
|
||||||
|
assertNotNull(bd2FactoryBean);
|
||||||
|
FactoryBeanDependentBean bean = (FactoryBeanDependentBean) lbf.autowire(FactoryBeanDependentBean.class,
|
||||||
|
AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, true);
|
||||||
|
assertNotEquals(bd1FactoryBean, bean.getFactoryBean());
|
||||||
|
assertEquals(bd2FactoryBean, bean.getFactoryBean());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetTypeForAbstractFactoryBean() {
|
public void testGetTypeForAbstractFactoryBean() {
|
||||||
DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
|
DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue