From 37332cdef1bae469bb7a0cbf2d71634e8e2c9760 Mon Sep 17 00:00:00 2001 From: Yanming Zhou Date: Wed, 19 Feb 2025 12:33:45 +0800 Subject: [PATCH] Add tests to ensure bean definition flag "fallback" take precedence over "defaultCandidate" Signed-off-by: Yanming Zhou --- .../DefaultListableBeanFactoryTests.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) 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);