Restored isTypeMatch null behavior and refined typeToMatch parameter name
Issue: SPR-12147
This commit is contained in:
parent
44e8f7b333
commit
b2308926bc
|
|
@ -264,7 +264,7 @@ public interface BeanFactory {
|
|||
* <p>Translates aliases back to the corresponding canonical bean name.
|
||||
* Will ask the parent factory if the bean cannot be found in this factory instance.
|
||||
* @param name the name of the bean to query
|
||||
* @param targetType the type to match against (as a {@code ResolvableType})
|
||||
* @param typeToMatch the type to match against (as a {@code ResolvableType})
|
||||
* @return {@code true} if the bean type matches,
|
||||
* {@code false} if it doesn't match or cannot be determined yet
|
||||
* @throws NoSuchBeanDefinitionException if there is no bean with the given name
|
||||
|
|
@ -272,7 +272,7 @@ public interface BeanFactory {
|
|||
* @see #getBean
|
||||
* @see #getType
|
||||
*/
|
||||
boolean isTypeMatch(String name, ResolvableType targetType) throws NoSuchBeanDefinitionException;
|
||||
boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException;
|
||||
|
||||
/**
|
||||
* Check whether the bean with the given name matches the specified type.
|
||||
|
|
@ -281,7 +281,7 @@ public interface BeanFactory {
|
|||
* <p>Translates aliases back to the corresponding canonical bean name.
|
||||
* Will ask the parent factory if the bean cannot be found in this factory instance.
|
||||
* @param name the name of the bean to query
|
||||
* @param targetType the type to match against (as a {@code Class})
|
||||
* @param typeToMatch the type to match against (as a {@code Class})
|
||||
* @return {@code true} if the bean type matches,
|
||||
* {@code false} if it doesn't match or cannot be determined yet
|
||||
* @throws NoSuchBeanDefinitionException if there is no bean with the given name
|
||||
|
|
@ -289,7 +289,7 @@ public interface BeanFactory {
|
|||
* @see #getBean
|
||||
* @see #getType
|
||||
*/
|
||||
boolean isTypeMatch(String name, Class<?> targetType) throws NoSuchBeanDefinitionException;
|
||||
boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException;
|
||||
|
||||
/**
|
||||
* Determine the type of the bean with the given name. More specifically,
|
||||
|
|
|
|||
|
|
@ -560,8 +560,8 @@ public abstract class AbstractBeanFactory extends FactoryBeanRegistrySupport imp
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean isTypeMatch(String name, Class<?> targetType) throws NoSuchBeanDefinitionException {
|
||||
return isTypeMatch(name, ResolvableType.forClass(targetType));
|
||||
public boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException {
|
||||
return isTypeMatch(name, ResolvableType.forClass(typeToMatch != null ? typeToMatch : Object.class));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -169,15 +169,15 @@ public class StaticListableBeanFactory implements ListableBeanFactory {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean isTypeMatch(String name, ResolvableType targetType) throws NoSuchBeanDefinitionException {
|
||||
public boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException {
|
||||
Class<?> type = getType(name);
|
||||
return (targetType == null || (type != null && targetType.isAssignableFrom(type)));
|
||||
return (type != null && typeToMatch.isAssignableFrom(type));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isTypeMatch(String name, Class<?> targetType) throws NoSuchBeanDefinitionException {
|
||||
public boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException {
|
||||
Class<?> type = getType(name);
|
||||
return (targetType == null || (type != null && targetType.isAssignableFrom(type)));
|
||||
return (typeToMatch == null || (type != null && typeToMatch.isAssignableFrom(type)));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -1666,6 +1666,36 @@ public class DefaultListableBeanFactoryTests {
|
|||
assertNull(lbf.getType("factoryBean"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetBeanNamesForTypeBeforeFactoryBeanCreation() {
|
||||
DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
|
||||
lbf.registerBeanDefinition("factoryBean", new RootBeanDefinition(FactoryBeanThatShouldntBeCalled.class.getName()));
|
||||
assertFalse(lbf.containsSingleton("factoryBean"));
|
||||
|
||||
String[] beanNames = lbf.getBeanNamesForType(Runnable.class, false, false);
|
||||
assertEquals(1, beanNames.length);
|
||||
assertEquals("&factoryBean", beanNames[0]);
|
||||
|
||||
beanNames = lbf.getBeanNamesForType(FactoryBean.class, false, false);
|
||||
assertEquals(1, beanNames.length);
|
||||
assertEquals("&factoryBean", beanNames[0]);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetBeanNamesForTypeAfterFactoryBeanCreation() {
|
||||
DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
|
||||
lbf.registerBeanDefinition("factoryBean", new RootBeanDefinition(FactoryBeanThatShouldntBeCalled.class.getName()));
|
||||
lbf.getBean("&factoryBean");
|
||||
|
||||
String[] beanNames = lbf.getBeanNamesForType(Runnable.class, false, false);
|
||||
assertEquals(1, beanNames.length);
|
||||
assertEquals("&factoryBean", beanNames[0]);
|
||||
|
||||
beanNames = lbf.getBeanNamesForType(FactoryBean.class, false, false);
|
||||
assertEquals(1, beanNames.length);
|
||||
assertEquals("&factoryBean", beanNames[0]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Verifies that a dependency on a {@link FactoryBean} can <strong>not</strong>
|
||||
* be autowired <em>by name</em>, as & is an illegal character in
|
||||
|
|
@ -2862,7 +2892,7 @@ public class DefaultListableBeanFactoryTests {
|
|||
}
|
||||
|
||||
|
||||
public static class FactoryBeanThatShouldntBeCalled implements FactoryBean<Object> {
|
||||
public static class FactoryBeanThatShouldntBeCalled implements FactoryBean<Object>, Runnable {
|
||||
|
||||
@Override
|
||||
public Object getObject() {
|
||||
|
|
@ -2878,6 +2908,11 @@ public class DefaultListableBeanFactoryTests {
|
|||
public boolean isSingleton() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -2993,7 +3028,6 @@ public class DefaultListableBeanFactoryTests {
|
|||
|
||||
private FactoryBean<?> factoryBean;
|
||||
|
||||
|
||||
public final FactoryBean<?> getFactoryBean() {
|
||||
return this.factoryBean;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2014 the original author or authors.
|
||||
* Copyright 2002-2015 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
|
@ -22,7 +22,6 @@ import java.util.concurrent.atomic.AtomicInteger;
|
|||
|
||||
import org.junit.Test;
|
||||
|
||||
import org.springframework.beans.BeansException;
|
||||
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
|
||||
import org.springframework.beans.factory.config.BeanPostProcessor;
|
||||
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
|
||||
|
|
@ -47,6 +46,7 @@ public final class FactoryBeanTests {
|
|||
private static final Resource ABSTRACT_CONTEXT = qualifiedResource(CLASS, "abstract.xml");
|
||||
private static final Resource CIRCULAR_CONTEXT = qualifiedResource(CLASS, "circular.xml");
|
||||
|
||||
|
||||
@Test
|
||||
public void testFactoryBeanReturnsNull() throws Exception {
|
||||
DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
|
||||
|
|
@ -238,12 +238,12 @@ public final class FactoryBeanTests {
|
|||
public void setInstanceName(String instanceName) {
|
||||
this.instanceName = instanceName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
|
||||
public void setBeanFactory(BeanFactory beanFactory) {
|
||||
this.beanFactory = beanFactory;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public T getObject() {
|
||||
if (instance == null) {
|
||||
|
|
|
|||
|
|
@ -1025,15 +1025,15 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean isTypeMatch(String name, ResolvableType targetType) throws NoSuchBeanDefinitionException {
|
||||
public boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException {
|
||||
assertBeanFactoryActive();
|
||||
return getBeanFactory().isTypeMatch(name, targetType);
|
||||
return getBeanFactory().isTypeMatch(name, typeToMatch);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isTypeMatch(String name, Class<?> targetType) throws NoSuchBeanDefinitionException {
|
||||
public boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException {
|
||||
assertBeanFactoryActive();
|
||||
return getBeanFactory().isTypeMatch(name, targetType);
|
||||
return getBeanFactory().isTypeMatch(name, typeToMatch);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -174,15 +174,15 @@ public class SimpleJndiBeanFactory extends JndiLocatorSupport implements BeanFac
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean isTypeMatch(String name, ResolvableType targetType) throws NoSuchBeanDefinitionException {
|
||||
public boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException {
|
||||
Class<?> type = getType(name);
|
||||
return (targetType == null || (type != null && targetType.isAssignableFrom(type)));
|
||||
return (type != null && typeToMatch.isAssignableFrom(type));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isTypeMatch(String name, Class<?> targetType) throws NoSuchBeanDefinitionException {
|
||||
public boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException {
|
||||
Class<?> type = getType(name);
|
||||
return (targetType == null || (type != null && targetType.isAssignableFrom(type)));
|
||||
return (typeToMatch == null || (type != null && typeToMatch.isAssignableFrom(type)));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -86,6 +86,7 @@ class StubWebApplicationContext implements WebApplicationContext {
|
|||
this.resourcePatternResolver = new ServletContextResourcePatternResolver(servletContext);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns an instance that can initialize {@link ApplicationContextAware} beans.
|
||||
*/
|
||||
|
|
@ -194,13 +195,13 @@ class StubWebApplicationContext implements WebApplicationContext {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean isTypeMatch(String name, ResolvableType targetType) throws NoSuchBeanDefinitionException {
|
||||
return this.beanFactory.isTypeMatch(name, targetType);
|
||||
public boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException {
|
||||
return this.beanFactory.isTypeMatch(name, typeToMatch);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isTypeMatch(String name, Class<?> targetType) throws NoSuchBeanDefinitionException {
|
||||
return this.beanFactory.isTypeMatch(name, targetType);
|
||||
public boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException {
|
||||
return this.beanFactory.isTypeMatch(name, typeToMatch);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
Loading…
Reference in New Issue