Merge branch '1.5.x' into 2.0.x

This commit is contained in:
Phillip Webb
2018-08-30 15:59:02 -07:00
7 changed files with 63 additions and 60 deletions

View File

@@ -20,7 +20,6 @@ import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
@@ -145,6 +144,17 @@ final class BeanTypeRegistry implements SmartInitializingSingleton {
this.beanDefinitions.clear();
}
private void updateTypesIfNecessary() {
this.beanFactory.getBeanNamesIterator().forEachRemaining((name) -> {
if (!this.beanTypes.containsKey(name)) {
addBeanType(name);
}
else {
updateBeanType(name);
}
});
}
private void addBeanType(String name) {
if (this.beanFactory.containsSingleton(name)) {
this.beanTypes.put(name, this.beanFactory.getType(name));
@@ -161,13 +171,17 @@ final class BeanTypeRegistry implements SmartInitializingSingleton {
}
}
private RootBeanDefinition getBeanDefinition(String name) {
try {
return (RootBeanDefinition) this.beanFactory.getMergedBeanDefinition(name);
private void updateBeanType(String name) {
if (this.beanFactory.isAlias(name) || this.beanFactory.containsSingleton(name)) {
return;
}
catch (BeanDefinitionStoreException ex) {
logIgnoredError("unresolvable metadata in bean definition", name, ex);
return null;
RootBeanDefinition beanDefinition = getBeanDefinition(name);
if (beanDefinition == null) {
return;
}
RootBeanDefinition previous = this.beanDefinitions.put(name, beanDefinition);
if (previous != null && !beanDefinition.equals(previous)) {
addBeanTypeForNonAliasDefinition(name, beanDefinition);
}
}
@@ -196,6 +210,16 @@ final class BeanTypeRegistry implements SmartInitializingSingleton {
}
}
private RootBeanDefinition getBeanDefinition(String name) {
try {
return (RootBeanDefinition) this.beanFactory.getMergedBeanDefinition(name);
}
catch (BeanDefinitionStoreException ex) {
logIgnoredError("unresolvable metadata in bean definition", name, ex);
return null;
}
}
private void logIgnoredError(String message, String name, Exception ex) {
if (logger.isDebugEnabled()) {
logger.debug("Ignoring " + message + " '" + name + "'", ex);
@@ -207,30 +231,6 @@ final class BeanTypeRegistry implements SmartInitializingSingleton {
&& !this.beanFactory.containsSingleton(factoryBeanName));
}
private void updateTypesIfNecessary() {
Iterator<String> names = this.beanFactory.getBeanNamesIterator();
while (names.hasNext()) {
String name = names.next();
if (!this.beanTypes.containsKey(name)) {
addBeanType(name);
}
else {
if (!this.beanFactory.isAlias(name)
&& !this.beanFactory.containsSingleton(name)) {
RootBeanDefinition beanDefinition = getBeanDefinition(name);
if (beanDefinition != null) {
RootBeanDefinition existingDefinition = this.beanDefinitions
.put(name, beanDefinition);
if (existingDefinition != null
&& !beanDefinition.equals(existingDefinition)) {
addBeanTypeForNonAliasDefinition(name, beanDefinition);
}
}
}
}
}
}
/**
* Attempt to guess the type that a {@link FactoryBean} will return based on the
* generics in its method signature.

View File

@@ -347,7 +347,6 @@ public class ConditionalOnBeanTests {
public static class ConsumingConfiguration {
ConsumingConfiguration(String testBean) {
}
}