34
34
import org .springframework .beans .factory .config .DependencyDescriptor ;
35
35
import org .springframework .beans .factory .config .SmartInstantiationAwareBeanPostProcessor ;
36
36
import org .springframework .beans .factory .support .BeanDefinitionRegistry ;
37
+ import org .springframework .beans .factory .support .DefaultBeanNameGenerator ;
37
38
import org .springframework .beans .factory .support .RootBeanDefinition ;
38
39
import org .springframework .core .Ordered ;
39
40
import org .springframework .core .PriorityOrdered ;
@@ -128,6 +129,7 @@ private void registerReplaceDefinition(ConfigurableListableBeanFactory beanFacto
128
129
129
130
RootBeanDefinition beanDefinition = createBeanDefinition (overrideMetadata );
130
131
String beanName = overrideMetadata .getBeanName ();
132
+ String beanNameIncludingFactory ;
131
133
BeanDefinition existingBeanDefinition = null ;
132
134
if (beanName == null ) {
133
135
Set <String > candidateNames = getExistingBeanNamesByType (beanFactory , overrideMetadata , true );
@@ -139,7 +141,8 @@ private void registerReplaceDefinition(ConfigurableListableBeanFactory beanFacto
139
141
" (as required by annotated field '" + field .getDeclaringClass ().getSimpleName () +
140
142
"." + field .getName () + "')" + (candidateCount > 0 ? ": " + candidateNames : "" ));
141
143
}
142
- beanName = candidateNames .iterator ().next ();
144
+ beanNameIncludingFactory = candidateNames .iterator ().next ();
145
+ beanName = BeanFactoryUtils .transformedBeanName (beanNameIncludingFactory );
143
146
existingBeanDefinition = beanFactory .getBeanDefinition (beanName );
144
147
}
145
148
else {
@@ -151,6 +154,7 @@ else if (enforceExistingDefinition) {
151
154
throw new IllegalStateException ("Unable to override bean '" + beanName + "': there is no " +
152
155
"bean definition to replace with that name of type " + overrideMetadata .getBeanType ());
153
156
}
157
+ beanNameIncludingFactory = beanName ;
154
158
}
155
159
156
160
if (existingBeanDefinition != null ) {
@@ -160,15 +164,15 @@ else if (enforceExistingDefinition) {
160
164
registry .registerBeanDefinition (beanName , beanDefinition );
161
165
162
166
Object override = overrideMetadata .createOverride (beanName , existingBeanDefinition , null );
163
- if (beanFactory .isSingleton (beanName )) {
167
+ if (beanFactory .isSingleton (beanNameIncludingFactory )) {
164
168
// Now we have an instance (the override) that we can register.
165
169
// At this stage we don't expect a singleton instance to be present,
166
170
// and this call will throw if there is such an instance already.
167
171
beanFactory .registerSingleton (beanName , override );
168
172
}
169
173
170
174
overrideMetadata .track (override , beanFactory );
171
- this .overrideRegistrar .registerNameForMetadata (overrideMetadata , beanName );
175
+ this .overrideRegistrar .registerNameForMetadata (overrideMetadata , beanNameIncludingFactory );
172
176
}
173
177
174
178
/**
@@ -190,7 +194,7 @@ private void registerWrapBean(ConfigurableListableBeanFactory beanFactory, Overr
190
194
" (as required by annotated field '" + field .getDeclaringClass ().getSimpleName () +
191
195
"." + field .getName () + "')" + (candidateCount > 0 ? ": " + candidateNames : "" ));
192
196
}
193
- beanName = candidateNames .iterator ().next ();
197
+ beanName = BeanFactoryUtils . transformedBeanName ( candidateNames .iterator ().next () );
194
198
}
195
199
else {
196
200
Set <String > candidates = getExistingBeanNamesByType (beanFactory , metadata , false );
0 commit comments