From bc369f3b805134ac5dd866bd328f9f480f07d1d8 Mon Sep 17 00:00:00 2001
From: Stephane Nicoll <snicoll@vmware.com>
Date: Wed, 7 Jul 2021 16:13:19 +0200
Subject: [PATCH] Improve BeanDefinitionBuilder to handle the synthetic flag

Closes gh-27141
---
 .../beans/factory/support/BeanDefinitionBuilder.java  | 11 ++++++++++-
 .../factory/support/BeanDefinitionBuilderTests.java   |  6 ++++++
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/BeanDefinitionBuilder.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/BeanDefinitionBuilder.java
index dab55e957daa..a7eff403a7a4 100644
--- a/spring-beans/src/main/java/org/springframework/beans/factory/support/BeanDefinitionBuilder.java
+++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/BeanDefinitionBuilder.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2019 the original author or authors.
+ * Copyright 2002-2021 the original author or authors.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -331,6 +331,15 @@ public BeanDefinitionBuilder setRole(int role) {
 		return this;
 	}
 
+	/**
+	 * Set whether this bean is 'synthetic', that is, not defined by
+	 * the application itself.
+	 */
+	public BeanDefinitionBuilder setSynthetic(boolean synthetic) {
+		this.beanDefinition.setSynthetic(synthetic);
+		return this;
+	}
+
 	/**
 	 * Apply the given customizers to the underlying bean definition.
 	 * @since 5.0
diff --git a/spring-beans/src/test/java/org/springframework/beans/factory/support/BeanDefinitionBuilderTests.java b/spring-beans/src/test/java/org/springframework/beans/factory/support/BeanDefinitionBuilderTests.java
index 26b26ebca58f..1db78dd8b4d1 100644
--- a/spring-beans/src/test/java/org/springframework/beans/factory/support/BeanDefinitionBuilderTests.java
+++ b/spring-beans/src/test/java/org/springframework/beans/factory/support/BeanDefinitionBuilderTests.java
@@ -110,6 +110,12 @@ void builderWithRole() {
 				.isEqualTo(BeanDefinition.ROLE_INFRASTRUCTURE);
 	}
 
+	@Test
+	void builderWithSynthetic() {
+		assertThat(BeanDefinitionBuilder.rootBeanDefinition(TestBean.class)
+				.setSynthetic(true).getBeanDefinition().isSynthetic()).isTrue();
+	}
+
 	@Test
 	void builderWithCustomizers() {
 		BeanDefinition beanDefinition = BeanDefinitionBuilder.rootBeanDefinition(TestBean.class)