Consistently override (and prevent overriding for) aliases with bean definitions
Closes gh-27866
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2018 the original author or authors.
|
||||
* Copyright 2002-2022 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.
|
||||
@@ -49,7 +49,7 @@ public class BeanDefinitionOverrideException extends BeanDefinitionStoreExceptio
|
||||
|
||||
super(beanDefinition.getResourceDescription(), beanName,
|
||||
"Cannot register bean definition [" + beanDefinition + "] for bean '" + beanName +
|
||||
"': There is already [" + existingDefinition + "] bound.");
|
||||
"' since there is already [" + existingDefinition + "] bound.");
|
||||
this.beanDefinition = beanDefinition;
|
||||
this.existingDefinition = existingDefinition;
|
||||
}
|
||||
|
||||
@@ -994,6 +994,23 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
|
||||
this.beanDefinitionMap.put(beanName, beanDefinition);
|
||||
}
|
||||
else {
|
||||
if (isAlias(beanName)) {
|
||||
if (!isAllowBeanDefinitionOverriding()) {
|
||||
String aliasedName = canonicalName(beanName);
|
||||
if (containsBeanDefinition(aliasedName)) { // alias for existing bean definition
|
||||
throw new BeanDefinitionOverrideException(
|
||||
beanName, beanDefinition, getBeanDefinition(aliasedName));
|
||||
}
|
||||
else { // alias pointing to non-existing bean definition
|
||||
throw new BeanDefinitionStoreException(beanDefinition.getResourceDescription(), beanName,
|
||||
"Cannot register bean definition for bean '" + beanName +
|
||||
"' since there is already an alias for bean '" + aliasedName + "' bound.");
|
||||
}
|
||||
}
|
||||
else {
|
||||
removeAlias(beanName);
|
||||
}
|
||||
}
|
||||
if (hasBeanCreationStarted()) {
|
||||
// Cannot modify startup-time collection elements anymore (for stable iteration)
|
||||
synchronized (this.beanDefinitionMap) {
|
||||
|
||||
Reference in New Issue
Block a user