Skip to content

Commit 7b11c3b

Browse files
lgxbslgxjhoeller
authored andcommitted
Transform the beanName in method isPrimary
Transform the beanName in method DefaultListableBeanFactory.isPrimary. Add the corresponding test cases. Fixes #22675.
1 parent a11a592 commit 7b11c3b

File tree

2 files changed

+40
-3
lines changed

2 files changed

+40
-3
lines changed

spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -1603,12 +1603,13 @@ else if (candidatePriority < highestPriority) {
16031603
* @return whether the given bean qualifies as primary
16041604
*/
16051605
protected boolean isPrimary(String beanName, Object beanInstance) {
1606-
if (containsBeanDefinition(beanName)) {
1607-
return getMergedLocalBeanDefinition(beanName).isPrimary();
1606+
String transformedBeanName = transformedBeanName(beanName);
1607+
if (containsBeanDefinition(transformedBeanName)) {
1608+
return getMergedLocalBeanDefinition(transformedBeanName).isPrimary();
16081609
}
16091610
BeanFactory parent = getParentBeanFactory();
16101611
return (parent instanceof DefaultListableBeanFactory &&
1611-
((DefaultListableBeanFactory) parent).isPrimary(beanName, beanInstance));
1612+
((DefaultListableBeanFactory) parent).isPrimary(transformedBeanName, beanInstance));
16121613
}
16131614

16141615
/**

spring-beans/src/test/java/org/springframework/beans/factory/DefaultListableBeanFactoryTests.java

+36
Original file line numberDiff line numberDiff line change
@@ -1455,6 +1455,24 @@ public void testGetBeanByTypeWithPrimary() {
14551455
assertFalse(lbf.containsSingleton("bd1"));
14561456
}
14571457

1458+
@Test
1459+
public void testGetFactoryBeanByTypeWithPrimary() {
1460+
DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
1461+
RootBeanDefinition bd1 = new RootBeanDefinition(NullTestBeanFactoryBean.class);
1462+
RootBeanDefinition bd2 = new RootBeanDefinition(NullTestBeanFactoryBean.class);
1463+
bd2.setPrimary(true);
1464+
lbf.registerBeanDefinition("bd1", bd1);
1465+
lbf.registerBeanDefinition("bd2", bd2);
1466+
NullTestBeanFactoryBean factoryBeanByType = lbf.getBean(NullTestBeanFactoryBean.class);
1467+
NullTestBeanFactoryBean bd1FactoryBean = (NullTestBeanFactoryBean)lbf.getBean("&bd1");
1468+
NullTestBeanFactoryBean bd2FactoryBean = (NullTestBeanFactoryBean)lbf.getBean("&bd2");
1469+
assertNotNull(factoryBeanByType);
1470+
assertNotNull(bd1FactoryBean);
1471+
assertNotNull(bd2FactoryBean);
1472+
assertNotEquals(factoryBeanByType, bd1FactoryBean);
1473+
assertEquals(factoryBeanByType, bd2FactoryBean);
1474+
}
1475+
14581476
@Test
14591477
public void testGetBeanByTypeWithMultiplePrimary() {
14601478
DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
@@ -1869,6 +1887,24 @@ public void testAutowireBeanWithFactoryBeanByType() {
18691887
factoryBean, bean.getFactoryBean());
18701888
}
18711889

1890+
@Test
1891+
public void testAutowireBeanWithFactoryBeanByTypeWithPrimary() {
1892+
DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
1893+
RootBeanDefinition bd1 = new RootBeanDefinition(LazyInitFactory.class);
1894+
RootBeanDefinition bd2 = new RootBeanDefinition(LazyInitFactory.class);
1895+
bd2.setPrimary(true);
1896+
lbf.registerBeanDefinition("bd1", bd1);
1897+
lbf.registerBeanDefinition("bd2", bd2);
1898+
LazyInitFactory bd1FactoryBean = (LazyInitFactory) lbf.getBean("&bd1");
1899+
LazyInitFactory bd2FactoryBean = (LazyInitFactory) lbf.getBean("&bd2");
1900+
assertNotNull(bd1FactoryBean);
1901+
assertNotNull(bd2FactoryBean);
1902+
FactoryBeanDependentBean bean = (FactoryBeanDependentBean) lbf.autowire(FactoryBeanDependentBean.class,
1903+
AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, true);
1904+
assertNotEquals(bd1FactoryBean, bean.getFactoryBean());
1905+
assertEquals(bd2FactoryBean, bean.getFactoryBean());
1906+
}
1907+
18721908
@Test
18731909
public void testGetTypeForAbstractFactoryBean() {
18741910
DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();

0 commit comments

Comments
 (0)