Skip to content

Commit 161d399

Browse files
committed
Introduce BeanOverrideHandler.createOverrideInstance() template method
1 parent da856de commit 161d399

File tree

3 files changed

+29
-7
lines changed

3 files changed

+29
-7
lines changed

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -191,8 +191,7 @@ else if (Boolean.getBoolean(AbstractAotProcessor.AOT_PROCESSING)) {
191191
registry.registerBeanDefinition(beanName, pseudoBeanDefinition);
192192
}
193193

194-
Object override = handler.createOverrideInstance(beanName, existingBeanDefinition, null);
195-
handler.trackOverrideInstance(override, beanFactory);
194+
Object override = handler.createOverrideInstance(beanName, existingBeanDefinition, null, beanFactory);
196195
this.beanOverrideRegistry.registerBeanOverrideHandler(handler, beanName);
197196

198197
// Now we have an instance (the override) that we can manually register as a singleton.

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

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,31 @@ public final BeanOverrideStrategy getStrategy() {
151151
return this.strategy;
152152
}
153153

154+
/**
155+
* {@linkplain #createOverrideInstance Create} and
156+
* {@linkplain #trackOverrideInstance track} a bean override instance for an
157+
* existing {@link BeanDefinition} or an existing singleton bean, based on the
158+
* metadata in this {@code BeanOverrideHandler}.
159+
* @param beanName the name of the bean being overridden
160+
* @param existingBeanDefinition an existing bean definition for the supplied
161+
* bean name, or {@code null} if not available or not relevant
162+
* @param existingBeanInstance an existing instance for the supplied bean name
163+
* for wrapping purposes, or {@code null} if not available or not relevant
164+
* @param singletonBeanRegistry a registry in which this handler can store
165+
* tracking state in the form of a singleton bean
166+
* @return the instance with which to override the bean
167+
* @see #trackOverrideInstance(Object, SingletonBeanRegistry)
168+
* @see #createOverrideInstance(String, BeanDefinition, Object)
169+
*/
170+
final Object createOverrideInstance(
171+
String beanName, @Nullable BeanDefinition existingBeanDefinition,
172+
@Nullable Object existingBeanInstance, SingletonBeanRegistry singletonBeanRegistry) {
173+
174+
Object override = createOverrideInstance(beanName, existingBeanDefinition, existingBeanInstance);
175+
trackOverrideInstance(override, singletonBeanRegistry);
176+
return override;
177+
}
178+
154179
/**
155180
* Create a bean override instance for an existing {@link BeanDefinition} or
156181
* an existing singleton bean, based on the metadata in this
@@ -172,11 +197,11 @@ protected abstract Object createOverrideInstance(String beanName,
172197
* <p>The default implementation does not track the supplied instance, but
173198
* this can be overridden in subclasses as appropriate.
174199
* @param override the bean override instance to track
175-
* @param trackingBeanRegistry a registry in which this handler can store
200+
* @param singletonBeanRegistry a registry in which this handler can store
176201
* tracking state in the form of a singleton bean
177202
* @see #createOverrideInstance(String, BeanDefinition, Object)
178203
*/
179-
protected void trackOverrideInstance(Object override, SingletonBeanRegistry trackingBeanRegistry) {
204+
protected void trackOverrideInstance(Object override, SingletonBeanRegistry singletonBeanRegistry) {
180205
// NO-OP
181206
}
182207

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,7 @@ Object wrapBeanIfNecessary(Object bean, String beanName) {
7878
BeanOverrideHandler handler = this.wrappingBeanOverrideHandlers.get(beanName);
7979
Assert.state(handler != null,
8080
() -> "Failed to find wrapping BeanOverrideHandler for bean '" + beanName + "'");
81-
bean = handler.createOverrideInstance(beanName, null, bean);
82-
handler.trackOverrideInstance(bean, this.beanFactory);
83-
return bean;
81+
return handler.createOverrideInstance(beanName, null, bean, this.beanFactory);
8482
}
8583

8684
void inject(Object target, BeanOverrideHandler handler) {

0 commit comments

Comments
 (0)