Browse Source

Restore non-null check for requiredType in BeanFactory methods

Beginning with Spring Framework 5.0, non-null checks for the
requiredType in the following methods were inadvertently removed with
the internal switch to ResolvableType.forRawClass(requiredType).

- BeanFactory.getBean(Class<T>, Object...)
- BeanFactory.getBeanProvider(Class<T>)
- AutowireCapableBeanFactory.resolveNamedBean(Class<T>)

This commit restores those non-null checks.

Closes gh-23045
pull/23837/head
Sam Brannen 7 years ago
parent
commit
6eac141160
  1. 4
      spring-beans/src/main/java/org/springframework/beans/factory/BeanFactory.java
  2. 3
      spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java
  3. 263
      spring-beans/src/test/java/org/springframework/beans/factory/DefaultListableBeanFactoryTests.java

4
spring-beans/src/main/java/org/springframework/beans/factory/BeanFactory.java

@ -208,7 +208,7 @@ public interface BeanFactory { @@ -208,7 +208,7 @@ public interface BeanFactory {
<T> T getBean(Class<T> requiredType, Object... args) throws BeansException;
/**
* Return an provider for the specified bean, allowing for lazy on-demand retrieval
* Return a provider for the specified bean, allowing for lazy on-demand retrieval
* of instances, including availability and uniqueness options.
* @param requiredType type the bean must match; can be an interface or superclass
* @return a corresponding provider handle
@ -218,7 +218,7 @@ public interface BeanFactory { @@ -218,7 +218,7 @@ public interface BeanFactory {
<T> ObjectProvider<T> getBeanProvider(Class<T> requiredType);
/**
* Return an provider for the specified bean, allowing for lazy on-demand retrieval
* Return a provider for the specified bean, allowing for lazy on-demand retrieval
* of instances, including availability and uniqueness options.
* @param requiredType type the bean must match; can be a generic type declaration.
* Note that collection types are not supported here, in contrast to reflective

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

@ -340,6 +340,7 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto @@ -340,6 +340,7 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
@SuppressWarnings("unchecked")
@Override
public <T> T getBean(Class<T> requiredType, @Nullable Object... args) throws BeansException {
Assert.notNull(requiredType, "Required type must not be null");
Object resolved = resolveBean(ResolvableType.forRawClass(requiredType), args, false);
if (resolved == null) {
throw new NoSuchBeanDefinitionException(requiredType);
@ -349,6 +350,7 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto @@ -349,6 +350,7 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
@Override
public <T> ObjectProvider<T> getBeanProvider(Class<T> requiredType) throws BeansException {
Assert.notNull(requiredType, "Required type must not be null");
return getBeanProvider(ResolvableType.forRawClass(requiredType));
}
@ -1080,6 +1082,7 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto @@ -1080,6 +1082,7 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
@Override
public <T> NamedBeanHolder<T> resolveNamedBean(Class<T> requiredType) throws BeansException {
Assert.notNull(requiredType, "Required type must not be null");
NamedBeanHolder<T> namedBean = resolveNamedBean(ResolvableType.forRawClass(requiredType), null, false);
if (namedBean != null) {
return namedBean;

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

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save