Polish BeanOverrideBeanFactoryPostProcessor

This commit is contained in:
Sam Brannen 2024-10-07 14:22:53 +02:00
parent c10a7f300c
commit 98bee41630
1 changed files with 14 additions and 10 deletions

View File

@ -76,9 +76,7 @@ class BeanOverrideBeanFactoryPostProcessor implements BeanFactoryPostProcessor,
* @param overrideRegistrar the {@code BeanOverrideRegistrar} used to track
* metadata
*/
public BeanOverrideBeanFactoryPostProcessor(Set<OverrideMetadata> metadata,
BeanOverrideRegistrar overrideRegistrar) {
BeanOverrideBeanFactoryPostProcessor(Set<OverrideMetadata> metadata, BeanOverrideRegistrar overrideRegistrar) {
this.metadata = metadata;
this.overrideRegistrar = overrideRegistrar;
}
@ -113,18 +111,23 @@ class BeanOverrideBeanFactoryPostProcessor implements BeanFactoryPostProcessor,
}
// The following is a "pseudo" bean definition which MUST NOT be used to
// create an actual bean instance.
// create an actual bean instance. In fact, it is only used as a placeholder
// to support overrides for nonexistent beans.
RootBeanDefinition pseudoBeanDefinition = createPseudoBeanDefinition(overrideMetadata);
String beanName = overrideMetadata.getBeanName();
String beanNameIncludingFactory;
BeanDefinition existingBeanDefinition = null;
if (beanName == null) {
beanNameIncludingFactory = getBeanNameForType(beanFactory, overrideMetadata, enforceExistingDefinition);
if (beanNameIncludingFactory == null) {
beanNameIncludingFactory = beanNameGenerator.generateBeanName(pseudoBeanDefinition, registry);
// We need to generate a name for a nonexistent bean.
beanName = beanNameGenerator.generateBeanName(pseudoBeanDefinition, registry);
beanNameIncludingFactory = beanName;
}
else {
// We are overriding an existing bean.
beanName = BeanFactoryUtils.transformedBeanName(beanNameIncludingFactory);
if (beanFactory.containsBeanDefinition(beanName)) {
existingBeanDefinition = beanFactory.getBeanDefinition(beanName);
}
}
@ -143,12 +146,13 @@ class BeanOverrideBeanFactoryPostProcessor implements BeanFactoryPostProcessor,
}
if (existingBeanDefinition != null) {
// Validate existing bean definition.
// Validate the existing bean definition.
validateBeanDefinition(beanFactory, beanName);
}
else {
// There was no existing bean definition, so we register the pseudo bean definition
// to ensure that a bean definition exists for the given bean name.
// There was no existing bean definition, so we register the "pseudo" bean
// definition to ensure that a suitable bean definition exists for the given
// bean name for proper autowiring candidate resolution.
registry.registerBeanDefinition(beanName, pseudoBeanDefinition);
}