diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java index d058be2bb7..80de1e3d25 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java @@ -1205,7 +1205,7 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto * Return whether the bean definition for the given bean name has been * marked as a primary bean. * @param beanName the name of the bean - * @param beanInstance the corresponding bean instance + * @param beanInstance the corresponding bean instance (can be null) * @return whether the given bean qualifies as primary */ protected boolean isPrimary(String beanName, Object beanInstance) { @@ -1221,11 +1221,14 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto * Return the priority assigned for the given bean instance by * the {@code javax.annotation.Priority} annotation. *
If the annotation is not present, returns {@code null}.
- * @param beanInstance the bean instance to check
+ * @param beanInstance the bean instance to check (can be null)
* @return the priority assigned to that bean or {@code null} if none is set
*/
protected Integer getPriority(Object beanInstance) {
- return OrderUtils.getPriorityValue(beanInstance.getClass());
+ if (beanInstance != null) {
+ return OrderUtils.getPriorityValue(beanInstance.getClass());
+ }
+ return null;
}
/**
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 784f0faa23..b41a24ec4a 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
@@ -1403,6 +1403,17 @@ public class DefaultListableBeanFactoryTests {
lbf.getBean(TestBean.class);
}
+ @Test
+ public void testGetBeanByTypeWithPriorityAndNullInstance() throws Exception {
+ DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
+ RootBeanDefinition bd1 = new RootBeanDefinition(HighPriorityTestBean.class);
+ RootBeanDefinition bd2 = new RootBeanDefinition(NullTestBeanFactoryBean.class);
+ lbf.registerBeanDefinition("bd1", bd1);
+ lbf.registerBeanDefinition("bd2", bd2);
+ TestBean bean = lbf.getBean(TestBean.class);
+ assertThat(bean.getBeanName(), equalTo("bd1"));
+ }
+
@Test
public void testGetBeanByTypePrimaryHasPrecedenceOverPriority() throws Exception {
DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
@@ -2893,5 +2904,23 @@ public class DefaultListableBeanFactoryTests {
@Priority(500)
private static class LowPriorityTestBean extends TestBean {}
+ private static class NullTestBeanFactoryBean