diff --git a/spring-beans/src/test/java/org/springframework/beans/factory/DefaultListableBeanFactoryTests.java b/spring-beans/src/test/java/org/springframework/beans/factory/DefaultListableBeanFactoryTests.java index 61cc8d6d2315..c48eb0ca9211 100644 --- a/spring-beans/src/test/java/org/springframework/beans/factory/DefaultListableBeanFactoryTests.java +++ b/spring-beans/src/test/java/org/springframework/beans/factory/DefaultListableBeanFactoryTests.java @@ -113,6 +113,7 @@ * @author Chris Beams * @author Phillip Webb * @author Stephane Nicoll + * @author Yanming Zhou */ class DefaultListableBeanFactoryTests { @@ -1665,6 +1666,42 @@ void getBeanByTypeWithPrimary() { assertThat(lbf.containsSingleton("bd1")).isFalse(); } + @Test + void getBeanByTypeWithUniqueNonFallbackDefinition() { + RootBeanDefinition bd1 = new RootBeanDefinition(TestBean.class); + bd1.setLazyInit(true); + bd1.setFallback(true); + RootBeanDefinition bd2 = new RootBeanDefinition(TestBean.class); + bd2.setFallback(true); + RootBeanDefinition bd3 = new RootBeanDefinition(TestBean.class); + lbf.registerBeanDefinition("bd1", bd1); + lbf.registerBeanDefinition("bd2", bd2); + lbf.registerBeanDefinition("bd3", bd3); + + TestBean bean = lbf.getBean(TestBean.class); + assertThat(bean.getBeanName()).isEqualTo("bd3"); + assertThat(lbf.containsSingleton("bd1")).isFalse(); + } + + @Test + void getBeanByTypeWithUniqueNonFallbackAndUniqueNonDefaultDefinition() { + RootBeanDefinition bd1 = new RootBeanDefinition(TestBean.class); + bd1.setLazyInit(true); + bd1.setFallback(true); + RootBeanDefinition bd2 = new RootBeanDefinition(TestBean.class); + bd2.setFallback(true); + bd2.setDefaultCandidate(false); + RootBeanDefinition bd3 = new RootBeanDefinition(TestBean.class); + bd3.setDefaultCandidate(false); + lbf.registerBeanDefinition("bd1", bd1); + lbf.registerBeanDefinition("bd2", bd2); + lbf.registerBeanDefinition("bd3", bd3); + + TestBean bean = lbf.getBean(TestBean.class); + assertThat(bean.getBeanName()).isEqualTo("bd3"); + assertThat(lbf.containsSingleton("bd1")).isFalse(); + } + @Test void getBeanByTypeWithUniqueNonDefaultDefinition() { RootBeanDefinition bd1 = new RootBeanDefinition(TestBean.class);