36
36
import org .springframework .beans .factory .support .RootBeanDefinition ;
37
37
import org .springframework .core .Ordered ;
38
38
import org .springframework .core .ResolvableType ;
39
+ import org .springframework .lang .Nullable ;
39
40
import org .springframework .util .Assert ;
40
41
41
42
/**
@@ -89,28 +90,26 @@ public int getOrder() {
89
90
90
91
@ Override
91
92
public void postProcessBeanFactory (ConfigurableListableBeanFactory beanFactory ) throws BeansException {
92
- if (!(beanFactory instanceof BeanDefinitionRegistry registry )) {
93
- throw new IllegalStateException ("Cannot process bean override with a BeanFactory " +
94
- "that doesn't implement BeanDefinitionRegistry: " + beanFactory .getClass ());
95
- }
96
-
97
93
for (OverrideMetadata metadata : this .metadata ) {
98
- registerBeanOverride (beanFactory , registry , metadata );
94
+ registerBeanOverride (beanFactory , metadata );
99
95
}
100
96
}
101
97
102
- private void registerBeanOverride (ConfigurableListableBeanFactory beanFactory , BeanDefinitionRegistry registry ,
103
- OverrideMetadata overrideMetadata ) {
104
-
98
+ private void registerBeanOverride (ConfigurableListableBeanFactory beanFactory , OverrideMetadata overrideMetadata ) {
105
99
switch (overrideMetadata .getStrategy ()) {
106
- case REPLACE_DEFINITION -> replaceDefinition (beanFactory , registry , overrideMetadata , true );
107
- case REPLACE_OR_CREATE_DEFINITION -> replaceDefinition (beanFactory , registry , overrideMetadata , false );
100
+ case REPLACE_DEFINITION -> replaceDefinition (beanFactory , overrideMetadata , true );
101
+ case REPLACE_OR_CREATE_DEFINITION -> replaceDefinition (beanFactory , overrideMetadata , false );
108
102
case WRAP_BEAN -> wrapBean (beanFactory , overrideMetadata );
109
103
}
110
104
}
111
105
112
- private void replaceDefinition (ConfigurableListableBeanFactory beanFactory , BeanDefinitionRegistry registry ,
113
- OverrideMetadata overrideMetadata , boolean enforceExistingDefinition ) {
106
+ private void replaceDefinition (ConfigurableListableBeanFactory beanFactory , OverrideMetadata overrideMetadata ,
107
+ boolean enforceExistingDefinition ) {
108
+
109
+ if (!(beanFactory instanceof BeanDefinitionRegistry registry )) {
110
+ throw new IllegalStateException ("Cannot process bean override with a BeanFactory " +
111
+ "that doesn't implement BeanDefinitionRegistry: " + beanFactory .getClass ());
112
+ }
114
113
115
114
// The following is a "pseudo" bean definition which MUST NOT be used to
116
115
// create an actual bean instance.
@@ -120,9 +119,12 @@ private void replaceDefinition(ConfigurableListableBeanFactory beanFactory, Bean
120
119
BeanDefinition existingBeanDefinition = null ;
121
120
if (beanName == null ) {
122
121
beanNameIncludingFactory = getBeanNameForType (
123
- beanFactory , registry , overrideMetadata , pseudoBeanDefinition , enforceExistingDefinition );
122
+ beanFactory , overrideMetadata , pseudoBeanDefinition , enforceExistingDefinition );
123
+ if (beanNameIncludingFactory == null ) {
124
+ beanNameIncludingFactory = beanNameGenerator .generateBeanName (pseudoBeanDefinition , registry );
125
+ }
124
126
beanName = BeanFactoryUtils .transformedBeanName (beanNameIncludingFactory );
125
- if (registry .containsBeanDefinition (beanName )) {
127
+ if (beanFactory .containsBeanDefinition (beanName )) {
126
128
existingBeanDefinition = beanFactory .getBeanDefinition (beanName );
127
129
}
128
130
}
@@ -200,8 +202,9 @@ private void wrapBean(ConfigurableListableBeanFactory beanFactory, OverrideMetad
200
202
this .overrideRegistrar .registerNameForMetadata (overrideMetadata , beanName );
201
203
}
202
204
203
- private String getBeanNameForType (ConfigurableListableBeanFactory beanFactory , BeanDefinitionRegistry registry ,
204
- OverrideMetadata overrideMetadata , RootBeanDefinition beanDefinition , boolean enforceExistingDefinition ) {
205
+ @ Nullable
206
+ private String getBeanNameForType (ConfigurableListableBeanFactory beanFactory , OverrideMetadata overrideMetadata ,
207
+ RootBeanDefinition beanDefinition , boolean enforceExistingDefinition ) {
205
208
206
209
Set <String > candidateNames = getExistingBeanNamesByType (beanFactory , overrideMetadata , true );
207
210
int candidateCount = candidateNames .size ();
@@ -215,7 +218,7 @@ else if (candidateCount == 0) {
215
218
"Unable to override bean: no bean definitions of type %s (as required by annotated field '%s.%s')"
216
219
.formatted (overrideMetadata .getBeanType (), field .getDeclaringClass ().getSimpleName (), field .getName ()));
217
220
}
218
- return beanNameGenerator . generateBeanName ( beanDefinition , registry ) ;
221
+ return null ;
219
222
}
220
223
221
224
Field field = overrideMetadata .getField ();
0 commit comments