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
|
||||
*/
|
||||
protected boolean isPrimary(String beanName, Object beanInstance) {
|
||||
if (containsBeanDefinition(beanName)) {
|
||||
return getMergedLocalBeanDefinition(beanName).isPrimary();
|
||||
String transformedBeanName = transformedBeanName(beanName);
|
||||
if (containsBeanDefinition(transformedBeanName)) {
|
||||
return getMergedLocalBeanDefinition(transformedBeanName).isPrimary();
|
||||
}
|
||||
BeanFactory parent = getParentBeanFactory();
|
||||
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"));
|
||||
}
|
||||
|
||||
@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
|
||||
public void testGetBeanByTypeWithMultiplePrimary() {
|
||||
DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
|
||||
|
|
@ -1869,6 +1887,24 @@ public class DefaultListableBeanFactoryTests {
|
|||
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
|
||||
public void testGetTypeForAbstractFactoryBean() {
|
||||
DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
|
||||
|
|
|
|||
Loading…
Reference in New Issue