Skip to content

Commit 98bee41

Browse files
committed
Polish BeanOverrideBeanFactoryPostProcessor
1 parent c10a7f3 commit 98bee41

File tree

1 file changed

+14
-10
lines changed

1 file changed

+14
-10
lines changed

spring-test/src/main/java/org/springframework/test/context/bean/override/BeanOverrideBeanFactoryPostProcessor.java

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,7 @@ class BeanOverrideBeanFactoryPostProcessor implements BeanFactoryPostProcessor,
7676
* @param overrideRegistrar the {@code BeanOverrideRegistrar} used to track
7777
* metadata
7878
*/
79-
public BeanOverrideBeanFactoryPostProcessor(Set<OverrideMetadata> metadata,
80-
BeanOverrideRegistrar overrideRegistrar) {
81-
79+
BeanOverrideBeanFactoryPostProcessor(Set<OverrideMetadata> metadata, BeanOverrideRegistrar overrideRegistrar) {
8280
this.metadata = metadata;
8381
this.overrideRegistrar = overrideRegistrar;
8482
}
@@ -113,18 +111,23 @@ private void replaceDefinition(ConfigurableListableBeanFactory beanFactory, Over
113111
}
114112

115113
// The following is a "pseudo" bean definition which MUST NOT be used to
116-
// create an actual bean instance.
114+
// create an actual bean instance. In fact, it is only used as a placeholder
115+
// to support overrides for nonexistent beans.
117116
RootBeanDefinition pseudoBeanDefinition = createPseudoBeanDefinition(overrideMetadata);
117+
118118
String beanName = overrideMetadata.getBeanName();
119119
String beanNameIncludingFactory;
120120
BeanDefinition existingBeanDefinition = null;
121121
if (beanName == null) {
122122
beanNameIncludingFactory = getBeanNameForType(beanFactory, overrideMetadata, enforceExistingDefinition);
123123
if (beanNameIncludingFactory == null) {
124-
beanNameIncludingFactory = beanNameGenerator.generateBeanName(pseudoBeanDefinition, registry);
124+
// We need to generate a name for a nonexistent bean.
125+
beanName = beanNameGenerator.generateBeanName(pseudoBeanDefinition, registry);
126+
beanNameIncludingFactory = beanName;
125127
}
126-
beanName = BeanFactoryUtils.transformedBeanName(beanNameIncludingFactory);
127-
if (beanFactory.containsBeanDefinition(beanName)) {
128+
else {
129+
// We are overriding an existing bean.
130+
beanName = BeanFactoryUtils.transformedBeanName(beanNameIncludingFactory);
128131
existingBeanDefinition = beanFactory.getBeanDefinition(beanName);
129132
}
130133
}
@@ -143,12 +146,13 @@ else if (enforceExistingDefinition) {
143146
}
144147

145148
if (existingBeanDefinition != null) {
146-
// Validate existing bean definition.
149+
// Validate the existing bean definition.
147150
validateBeanDefinition(beanFactory, beanName);
148151
}
149152
else {
150-
// There was no existing bean definition, so we register the pseudo bean definition
151-
// to ensure that a bean definition exists for the given bean name.
153+
// There was no existing bean definition, so we register the "pseudo" bean
154+
// definition to ensure that a suitable bean definition exists for the given
155+
// bean name for proper autowiring candidate resolution.
152156
registry.registerBeanDefinition(beanName, pseudoBeanDefinition);
153157
}
154158

0 commit comments

Comments
 (0)