Skip to content

Commit 09027f7

Browse files
committed
ResolvableType.forRawClass as a straight wrapper for Class.isAssignableFrom
Issue: SPR-12846
1 parent b230892 commit 09027f7

File tree

5 files changed

+231
-130
lines changed

5 files changed

+231
-130
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -561,7 +561,7 @@ else if (BeanFactoryUtils.isFactoryDereference(name)) {
561561

562562
@Override
563563
public boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException {
564-
return isTypeMatch(name, ResolvableType.forClass(typeToMatch != null ? typeToMatch : Object.class));
564+
return isTypeMatch(name, ResolvableType.forRawClass(typeToMatch));
565565
}
566566

567567
@Override

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -412,16 +412,15 @@ public String[] getBeanNamesForType(Class<?> type) {
412412
@Override
413413
public String[] getBeanNamesForType(Class<?> type, boolean includeNonSingletons, boolean allowEagerInit) {
414414
if (!isConfigurationFrozen() || type == null || !allowEagerInit) {
415-
return doGetBeanNamesForType(ResolvableType.forClass(type != null ? type : Object.class),
416-
includeNonSingletons, allowEagerInit);
415+
return doGetBeanNamesForType(ResolvableType.forRawClass(type), includeNonSingletons, allowEagerInit);
417416
}
418417
Map<Class<?>, String[]> cache =
419418
(includeNonSingletons ? this.allBeanNamesByType : this.singletonBeanNamesByType);
420419
String[] resolvedBeanNames = cache.get(type);
421420
if (resolvedBeanNames != null) {
422421
return resolvedBeanNames;
423422
}
424-
resolvedBeanNames = doGetBeanNamesForType(ResolvableType.forClass(type), includeNonSingletons, allowEagerInit);
423+
resolvedBeanNames = doGetBeanNamesForType(ResolvableType.forRawClass(type), includeNonSingletons, true);
425424
if (ClassUtils.isCacheSafe(type, getBeanClassLoader())) {
426425
cache.put(type, resolvedBeanNames);
427426
}

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

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.springframework.beans.factory;
1818

1919
import java.io.Closeable;
20+
import java.io.Serializable;
2021
import java.lang.reflect.Field;
2122
import java.net.MalformedURLException;
2223
import java.security.AccessControlContext;
@@ -32,6 +33,7 @@
3233
import java.util.Map;
3334
import java.util.Properties;
3435
import java.util.Set;
36+
import java.util.concurrent.Callable;
3537
import javax.annotation.Priority;
3638
import javax.security.auth.Subject;
3739

@@ -1669,13 +1671,21 @@ public void testGetTypeForAbstractFactoryBean() {
16691671
@Test
16701672
public void testGetBeanNamesForTypeBeforeFactoryBeanCreation() {
16711673
DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
1672-
lbf.registerBeanDefinition("factoryBean", new RootBeanDefinition(FactoryBeanThatShouldntBeCalled.class.getName()));
1674+
lbf.registerBeanDefinition("factoryBean", new RootBeanDefinition(FactoryBeanThatShouldntBeCalled.class));
16731675
assertFalse(lbf.containsSingleton("factoryBean"));
16741676

16751677
String[] beanNames = lbf.getBeanNamesForType(Runnable.class, false, false);
16761678
assertEquals(1, beanNames.length);
16771679
assertEquals("&factoryBean", beanNames[0]);
16781680

1681+
beanNames = lbf.getBeanNamesForType(Callable.class, false, false);
1682+
assertEquals(1, beanNames.length);
1683+
assertEquals("&factoryBean", beanNames[0]);
1684+
1685+
beanNames = lbf.getBeanNamesForType(RepositoryFactoryInformation.class, false, false);
1686+
assertEquals(1, beanNames.length);
1687+
assertEquals("&factoryBean", beanNames[0]);
1688+
16791689
beanNames = lbf.getBeanNamesForType(FactoryBean.class, false, false);
16801690
assertEquals(1, beanNames.length);
16811691
assertEquals("&factoryBean", beanNames[0]);
@@ -1684,13 +1694,21 @@ public void testGetBeanNamesForTypeBeforeFactoryBeanCreation() {
16841694
@Test
16851695
public void testGetBeanNamesForTypeAfterFactoryBeanCreation() {
16861696
DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
1687-
lbf.registerBeanDefinition("factoryBean", new RootBeanDefinition(FactoryBeanThatShouldntBeCalled.class.getName()));
1697+
lbf.registerBeanDefinition("factoryBean", new RootBeanDefinition(FactoryBeanThatShouldntBeCalled.class));
16881698
lbf.getBean("&factoryBean");
16891699

16901700
String[] beanNames = lbf.getBeanNamesForType(Runnable.class, false, false);
16911701
assertEquals(1, beanNames.length);
16921702
assertEquals("&factoryBean", beanNames[0]);
16931703

1704+
beanNames = lbf.getBeanNamesForType(Callable.class, false, false);
1705+
assertEquals(1, beanNames.length);
1706+
assertEquals("&factoryBean", beanNames[0]);
1707+
1708+
beanNames = lbf.getBeanNamesForType(RepositoryFactoryInformation.class, false, false);
1709+
assertEquals(1, beanNames.length);
1710+
assertEquals("&factoryBean", beanNames[0]);
1711+
16941712
beanNames = lbf.getBeanNamesForType(FactoryBean.class, false, false);
16951713
assertEquals(1, beanNames.length);
16961714
assertEquals("&factoryBean", beanNames[0]);
@@ -2892,10 +2910,24 @@ public Object createGeneric() {
28922910
}
28932911

28942912

2895-
public static class FactoryBeanThatShouldntBeCalled implements FactoryBean<Object>, Runnable {
2913+
public interface Repository<T, ID extends Serializable> {
2914+
}
2915+
2916+
2917+
public interface RepositoryFactoryInformation<T, ID extends Serializable> {
2918+
}
2919+
2920+
2921+
public static abstract class RepositoryFactoryBeanSupport<T extends Repository<S, ID>, S, ID extends Serializable>
2922+
implements RepositoryFactoryInformation<S, ID>, FactoryBean<T> {
2923+
}
2924+
2925+
2926+
public static class FactoryBeanThatShouldntBeCalled<T extends Repository<S, ID>, S, ID extends Serializable>
2927+
extends RepositoryFactoryBeanSupport<T, S, ID> implements Runnable, Callable<T> {
28962928

28972929
@Override
2898-
public Object getObject() {
2930+
public T getObject() {
28992931
throw new IllegalStateException();
29002932
}
29012933

@@ -2913,6 +2945,11 @@ public boolean isSingleton() {
29132945
public void run() {
29142946
throw new IllegalStateException();
29152947
}
2948+
2949+
@Override
2950+
public T call() throws Exception {
2951+
throw new IllegalStateException();
2952+
}
29162953
}
29172954

29182955

0 commit comments

Comments
 (0)