Log alias removal in `DefaultListableBeanFactory`
mathewm3 opened this issue · 0 comments
mathewm3 commented
Issue
The following code was added in DefaultListableBeanFactory
from 6.x to check whether an alias for the beanName
exists.
If it exists, the corresponding alias is removed.
if (isAlias(beanName)) {
String aliasedName = canonicalName(beanName);
if (!isBeanDefinitionOverridable(aliasedName)) {
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);
}
}
However, there is no log message to indicate that an alias was removed, which can lead to errors without any warning message to the user.
Proposal
Include logging for removal of an alias, similar to how it is done when there is a duplicate bean name with logBeanDefinitionOverriding()
.
if (existingDefinition != null) {
if (!isBeanDefinitionOverridable(beanName)) {
throw new BeanDefinitionOverrideException(beanName, beanDefinition, existingDefinition);
}
else {
logBeanDefinitionOverriding(beanName, beanDefinition, existingDefinition);
}
this.beanDefinitionMap.put(beanName, beanDefinition);
}