diff --git a/spring-core/src/test/java/org/springframework/core/annotation/AnnotatedElementUtilsTests.java b/spring-core/src/test/java/org/springframework/core/annotation/AnnotatedElementUtilsTests.java index 0ca70fac7419..ea719a1e2e56 100644 --- a/spring-core/src/test/java/org/springframework/core/annotation/AnnotatedElementUtilsTests.java +++ b/spring-core/src/test/java/org/springframework/core/annotation/AnnotatedElementUtilsTests.java @@ -488,6 +488,20 @@ public void getMergedAnnotationWithImplicitAliasesInMetaAnnotationOnComposedAnno assertTrue(isAnnotated(element, name)); } + @Test + public void getMergedAnnotationWithImplicitAliasesWithDefaultsInMetaAnnotationOnComposedAnnotation() { + Class element = ImplicitAliasesWithDefaultsClass.class; + String name = AliasesWithDefaults.class.getName(); + AliasesWithDefaults annotation = getMergedAnnotation(element, AliasesWithDefaults.class); + + assertNotNull("Should find @AliasesWithDefaults on " + element.getSimpleName(), annotation); + assertEquals("a1", "ImplicitAliasesWithDefaults", annotation.a1()); + assertEquals("a2", "ImplicitAliasesWithDefaults", annotation.a2()); + + // Verify contracts between utility methods: + assertTrue(isAnnotated(element, name)); + } + @Test public void getMergedAnnotationAttributesWithInvalidConventionBasedComposedAnnotation() { Class element = InvalidConventionBasedComposedContextConfigClass.class; @@ -958,7 +972,6 @@ static class MetaCycleAnnotatedClass { String[] xmlConfigFiles() default {}; } - @ContextConfig @Retention(RetentionPolicy.RUNTIME) @interface AliasedComposedContextConfig { @@ -999,6 +1012,27 @@ static class MetaCycleAnnotatedClass { @interface ComposedImplicitAliasesContextConfig { } + @Retention(RetentionPolicy.RUNTIME) + @interface AliasesWithDefaults { + + @AliasFor("a2") + String a1() default "AliasesWithDefaults"; + + @AliasFor("a1") + String a2() default "AliasesWithDefaults"; + } + + @Retention(RetentionPolicy.RUNTIME) + @AliasesWithDefaults + @interface ImplicitAliasesWithDefaults { + + @AliasFor(annotation = AliasesWithDefaults.class, attribute = "a1") + String b1() default "ImplicitAliasesWithDefaults"; + + @AliasFor(annotation = AliasesWithDefaults.class, attribute = "a2") + String b2() default "ImplicitAliasesWithDefaults"; + } + @ImplicitAliasesContextConfig @Retention(RetentionPolicy.RUNTIME) @interface TransitiveImplicitAliasesContextConfig { @@ -1296,6 +1330,10 @@ static class ImplicitAliasesContextConfigClass2 { static class ImplicitAliasesContextConfigClass3 { } + @ImplicitAliasesWithDefaults + static class ImplicitAliasesWithDefaultsClass { + } + @TransitiveImplicitAliasesContextConfig(groovy = "test.groovy") static class TransitiveImplicitAliasesContextConfigClass { }