Skip to content

Commit ecdf069

Browse files
committed
Add AOT support for AutowiredPropertyMarker
Closes gh-35731
1 parent 01a58a2 commit ecdf069

File tree

3 files changed

+51
-1
lines changed

3 files changed

+51
-1
lines changed

spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanDefinitionPropertyValueCodeGeneratorDelegates.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.springframework.aot.generate.ValueCodeGeneratorDelegates;
3030
import org.springframework.aot.generate.ValueCodeGeneratorDelegates.CollectionDelegate;
3131
import org.springframework.aot.generate.ValueCodeGeneratorDelegates.MapDelegate;
32+
import org.springframework.beans.factory.config.AutowiredPropertyMarker;
3233
import org.springframework.beans.factory.config.BeanReference;
3334
import org.springframework.beans.factory.config.RuntimeBeanReference;
3435
import org.springframework.beans.factory.config.TypedStringValue;
@@ -57,6 +58,7 @@ abstract class BeanDefinitionPropertyValueCodeGeneratorDelegates {
5758
* <li>{@link LinkedHashMap}</li>
5859
* <li>{@link BeanReference}</li>
5960
* <li>{@link TypedStringValue}</li>
61+
* <li>{@link AutowiredPropertyMarker}</li>
6062
* </ul>
6163
* When combined with {@linkplain ValueCodeGeneratorDelegates#INSTANCES the
6264
* delegates for common value types}, this should be added first as they have
@@ -68,7 +70,8 @@ abstract class BeanDefinitionPropertyValueCodeGeneratorDelegates {
6870
new ManagedMapDelegate(),
6971
new LinkedHashMapDelegate(),
7072
new BeanReferenceDelegate(),
71-
new TypedStringValueDelegate()
73+
new TypedStringValueDelegate(),
74+
new AutowiredPropertyMarkerDelegate()
7275
);
7376

7477

@@ -216,4 +219,20 @@ private CodeBlock generateTypeStringValueCode(ValueCodeGenerator valueCodeGenera
216219
return valueCodeGenerator.generateCode(value);
217220
}
218221
}
222+
223+
/**
224+
* {@link Delegate} for {@link AutowiredPropertyMarker} types.
225+
*/
226+
private static class AutowiredPropertyMarkerDelegate implements Delegate {
227+
228+
@Override
229+
@Nullable
230+
public CodeBlock generateCode(ValueCodeGenerator valueCodeGenerator, Object value) {
231+
if (value instanceof AutowiredPropertyMarker) {
232+
return CodeBlock.of("$T.INSTANCE", AutowiredPropertyMarker.class);
233+
}
234+
return null;
235+
}
236+
}
237+
219238
}

spring-beans/src/test/java/org/springframework/beans/factory/aot/BeanDefinitionMethodGeneratorTests.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package org.springframework.beans.factory.aot;
1818

19+
1920
import java.util.ArrayList;
2021
import java.util.Collections;
2122
import java.util.List;
@@ -34,6 +35,7 @@
3435
import org.springframework.aot.generate.MethodReference;
3536
import org.springframework.aot.generate.MethodReference.ArgumentCodeGenerator;
3637
import org.springframework.aot.test.generate.TestGenerationContext;
38+
import org.springframework.beans.factory.config.AutowiredPropertyMarker;
3739
import org.springframework.beans.factory.config.BeanDefinition;
3840
import org.springframework.beans.factory.config.ConstructorArgumentValues.ValueHolder;
3941
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
@@ -626,6 +628,22 @@ void generateBeanDefinitionMethodWhenCustomPropertyValueUsesCustomDelegate() {
626628
-> assertThat(customPropertyValue.value()).isEqualTo("test")));
627629
}
628630

631+
@Test
632+
void generateBeanDefinitionMethodWhenHasAutowiredPropertyGeneratesMethod() {
633+
RootBeanDefinition beanDefinition = (RootBeanDefinition) BeanDefinitionBuilder
634+
.rootBeanDefinition(CustomBean.class).addAutowiredProperty("innerBean")
635+
.getBeanDefinition();
636+
RegisteredBean registeredBean = registerBean(beanDefinition);
637+
BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator(
638+
this.methodGeneratorFactory, registeredBean, null,
639+
Collections.emptyList());
640+
MethodReference method = generator.generateBeanDefinitionMethod(
641+
this.generationContext, this.beanRegistrationsCode);
642+
compile(method, (actual, compiled) ->
643+
assertThat(actual.getPropertyValues().get("innerBean"))
644+
.isSameAs(AutowiredPropertyMarker.INSTANCE));
645+
}
646+
629647
@Test
630648
void generateBeanDefinitionMethodWhenHasAotContributionsAppliesContributions() {
631649
RegisteredBean registeredBean = registerBean(

spring-beans/src/test/java/org/springframework/beans/factory/aot/BeanDefinitionPropertyValueCodeGeneratorDelegatesTests.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import org.springframework.aot.generate.ValueCodeGenerator;
4040
import org.springframework.aot.generate.ValueCodeGeneratorDelegates;
4141
import org.springframework.aot.test.generate.TestGenerationContext;
42+
import org.springframework.beans.factory.config.AutowiredPropertyMarker;
4243
import org.springframework.beans.factory.config.BeanReference;
4344
import org.springframework.beans.factory.config.RuntimeBeanNameReference;
4445
import org.springframework.beans.factory.config.RuntimeBeanReference;
@@ -486,4 +487,16 @@ void generatedWhenBeanReferenceByType() {
486487

487488
}
488489

490+
@Nested
491+
class AutowiredPropertyMarkerTests {
492+
493+
@Test
494+
void generateWhenAutowiredPropertyMarker() {
495+
compile(AutowiredPropertyMarker.INSTANCE, (instance, compiler) ->
496+
assertThat(instance).isInstanceOf(AutowiredPropertyMarker.class)
497+
.isSameAs(AutowiredPropertyMarker.INSTANCE));
498+
}
499+
500+
}
501+
489502
}

0 commit comments

Comments
 (0)