Polish BeanOverrideBeanFactoryPostProcessor
This commit is contained in:
parent
c10a7f300c
commit
98bee41630
|
@ -76,9 +76,7 @@ class BeanOverrideBeanFactoryPostProcessor implements BeanFactoryPostProcessor,
|
||||||
* @param overrideRegistrar the {@code BeanOverrideRegistrar} used to track
|
* @param overrideRegistrar the {@code BeanOverrideRegistrar} used to track
|
||||||
* metadata
|
* metadata
|
||||||
*/
|
*/
|
||||||
public BeanOverrideBeanFactoryPostProcessor(Set<OverrideMetadata> metadata,
|
BeanOverrideBeanFactoryPostProcessor(Set<OverrideMetadata> metadata, BeanOverrideRegistrar overrideRegistrar) {
|
||||||
BeanOverrideRegistrar overrideRegistrar) {
|
|
||||||
|
|
||||||
this.metadata = metadata;
|
this.metadata = metadata;
|
||||||
this.overrideRegistrar = overrideRegistrar;
|
this.overrideRegistrar = overrideRegistrar;
|
||||||
}
|
}
|
||||||
|
@ -113,18 +111,23 @@ class BeanOverrideBeanFactoryPostProcessor implements BeanFactoryPostProcessor,
|
||||||
}
|
}
|
||||||
|
|
||||||
// The following is a "pseudo" bean definition which MUST NOT be used to
|
// 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);
|
RootBeanDefinition pseudoBeanDefinition = createPseudoBeanDefinition(overrideMetadata);
|
||||||
|
|
||||||
String beanName = overrideMetadata.getBeanName();
|
String beanName = overrideMetadata.getBeanName();
|
||||||
String beanNameIncludingFactory;
|
String beanNameIncludingFactory;
|
||||||
BeanDefinition existingBeanDefinition = null;
|
BeanDefinition existingBeanDefinition = null;
|
||||||
if (beanName == null) {
|
if (beanName == null) {
|
||||||
beanNameIncludingFactory = getBeanNameForType(beanFactory, overrideMetadata, enforceExistingDefinition);
|
beanNameIncludingFactory = getBeanNameForType(beanFactory, overrideMetadata, enforceExistingDefinition);
|
||||||
if (beanNameIncludingFactory == null) {
|
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;
|
||||||
}
|
}
|
||||||
beanName = BeanFactoryUtils.transformedBeanName(beanNameIncludingFactory);
|
else {
|
||||||
if (beanFactory.containsBeanDefinition(beanName)) {
|
// We are overriding an existing bean.
|
||||||
|
beanName = BeanFactoryUtils.transformedBeanName(beanNameIncludingFactory);
|
||||||
existingBeanDefinition = beanFactory.getBeanDefinition(beanName);
|
existingBeanDefinition = beanFactory.getBeanDefinition(beanName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -143,12 +146,13 @@ class BeanOverrideBeanFactoryPostProcessor implements BeanFactoryPostProcessor,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (existingBeanDefinition != null) {
|
if (existingBeanDefinition != null) {
|
||||||
// Validate existing bean definition.
|
// Validate the existing bean definition.
|
||||||
validateBeanDefinition(beanFactory, beanName);
|
validateBeanDefinition(beanFactory, beanName);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// There was no existing bean definition, so we register the pseudo bean definition
|
// There was no existing bean definition, so we register the "pseudo" bean
|
||||||
// to ensure that a bean definition exists for the given bean name.
|
// definition to ensure that a suitable bean definition exists for the given
|
||||||
|
// bean name for proper autowiring candidate resolution.
|
||||||
registry.registerBeanDefinition(beanName, pseudoBeanDefinition);
|
registry.registerBeanDefinition(beanName, pseudoBeanDefinition);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue