diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanDefinitionPropertyValueCodeGeneratorDelegates.java b/spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanDefinitionPropertyValueCodeGeneratorDelegates.java
index 222b50e327b..d2a92ef6229 100644
--- a/spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanDefinitionPropertyValueCodeGeneratorDelegates.java
+++ b/spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanDefinitionPropertyValueCodeGeneratorDelegates.java
@@ -29,6 +29,7 @@ import org.springframework.aot.generate.ValueCodeGenerator.Delegate;
import org.springframework.aot.generate.ValueCodeGeneratorDelegates;
import org.springframework.aot.generate.ValueCodeGeneratorDelegates.CollectionDelegate;
import org.springframework.aot.generate.ValueCodeGeneratorDelegates.MapDelegate;
+import org.springframework.beans.factory.config.AutowiredPropertyMarker;
import org.springframework.beans.factory.config.BeanReference;
import org.springframework.beans.factory.config.RuntimeBeanReference;
import org.springframework.beans.factory.config.TypedStringValue;
@@ -57,6 +58,7 @@ abstract class BeanDefinitionPropertyValueCodeGeneratorDelegates {
*
{@link LinkedHashMap}
* {@link BeanReference}
* {@link TypedStringValue}
+ * {@link AutowiredPropertyMarker}
*
* When combined with {@linkplain ValueCodeGeneratorDelegates#INSTANCES the
* delegates for common value types}, this should be added first as they have
@@ -68,7 +70,8 @@ abstract class BeanDefinitionPropertyValueCodeGeneratorDelegates {
new ManagedMapDelegate(),
new LinkedHashMapDelegate(),
new BeanReferenceDelegate(),
- new TypedStringValueDelegate()
+ new TypedStringValueDelegate(),
+ new AutowiredPropertyMarkerDelegate()
);
@@ -216,4 +219,20 @@ abstract class BeanDefinitionPropertyValueCodeGeneratorDelegates {
return valueCodeGenerator.generateCode(value);
}
}
+
+ /**
+ * {@link Delegate} for {@link AutowiredPropertyMarker} types.
+ */
+ private static class AutowiredPropertyMarkerDelegate implements Delegate {
+
+ @Override
+ @Nullable
+ public CodeBlock generateCode(ValueCodeGenerator valueCodeGenerator, Object value) {
+ if (value instanceof AutowiredPropertyMarker) {
+ return CodeBlock.of("$T.INSTANCE", AutowiredPropertyMarker.class);
+ }
+ return null;
+ }
+ }
+
}
diff --git a/spring-beans/src/test/java/org/springframework/beans/factory/aot/BeanDefinitionMethodGeneratorTests.java b/spring-beans/src/test/java/org/springframework/beans/factory/aot/BeanDefinitionMethodGeneratorTests.java
index 8756eadb014..5e374429ad5 100644
--- a/spring-beans/src/test/java/org/springframework/beans/factory/aot/BeanDefinitionMethodGeneratorTests.java
+++ b/spring-beans/src/test/java/org/springframework/beans/factory/aot/BeanDefinitionMethodGeneratorTests.java
@@ -16,6 +16,7 @@
package org.springframework.beans.factory.aot;
+
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -34,6 +35,7 @@ import org.springframework.aot.generate.GenerationContext;
import org.springframework.aot.generate.MethodReference;
import org.springframework.aot.generate.MethodReference.ArgumentCodeGenerator;
import org.springframework.aot.test.generate.TestGenerationContext;
+import org.springframework.beans.factory.config.AutowiredPropertyMarker;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.ConstructorArgumentValues.ValueHolder;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
@@ -626,6 +628,22 @@ class BeanDefinitionMethodGeneratorTests {
-> assertThat(customPropertyValue.value()).isEqualTo("test")));
}
+ @Test
+ void generateBeanDefinitionMethodWhenHasAutowiredPropertyGeneratesMethod() {
+ RootBeanDefinition beanDefinition = (RootBeanDefinition) BeanDefinitionBuilder
+ .rootBeanDefinition(CustomBean.class).addAutowiredProperty("innerBean")
+ .getBeanDefinition();
+ RegisteredBean registeredBean = registerBean(beanDefinition);
+ BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator(
+ this.methodGeneratorFactory, registeredBean, null,
+ Collections.emptyList());
+ MethodReference method = generator.generateBeanDefinitionMethod(
+ this.generationContext, this.beanRegistrationsCode);
+ compile(method, (actual, compiled) ->
+ assertThat(actual.getPropertyValues().get("innerBean"))
+ .isSameAs(AutowiredPropertyMarker.INSTANCE));
+ }
+
@Test
void generateBeanDefinitionMethodWhenHasAotContributionsAppliesContributions() {
RegisteredBean registeredBean = registerBean(
diff --git a/spring-beans/src/test/java/org/springframework/beans/factory/aot/BeanDefinitionPropertyValueCodeGeneratorDelegatesTests.java b/spring-beans/src/test/java/org/springframework/beans/factory/aot/BeanDefinitionPropertyValueCodeGeneratorDelegatesTests.java
index daf46c53336..15448dcbff3 100644
--- a/spring-beans/src/test/java/org/springframework/beans/factory/aot/BeanDefinitionPropertyValueCodeGeneratorDelegatesTests.java
+++ b/spring-beans/src/test/java/org/springframework/beans/factory/aot/BeanDefinitionPropertyValueCodeGeneratorDelegatesTests.java
@@ -39,6 +39,7 @@ import org.springframework.aot.generate.GeneratedClass;
import org.springframework.aot.generate.ValueCodeGenerator;
import org.springframework.aot.generate.ValueCodeGeneratorDelegates;
import org.springframework.aot.test.generate.TestGenerationContext;
+import org.springframework.beans.factory.config.AutowiredPropertyMarker;
import org.springframework.beans.factory.config.BeanReference;
import org.springframework.beans.factory.config.RuntimeBeanNameReference;
import org.springframework.beans.factory.config.RuntimeBeanReference;
@@ -486,4 +487,16 @@ class BeanDefinitionPropertyValueCodeGeneratorDelegatesTests {
}
+ @Nested
+ class AutowiredPropertyMarkerTests {
+
+ @Test
+ void generateWhenAutowiredPropertyMarker() {
+ compile(AutowiredPropertyMarker.INSTANCE, (instance, compiler) ->
+ assertThat(instance).isInstanceOf(AutowiredPropertyMarker.class)
+ .isSameAs(AutowiredPropertyMarker.INSTANCE));
+ }
+
+ }
+
}