From ddc3925659d30be5a41d3e10103d6089b99e2ceb Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Tue, 22 Sep 2015 08:47:20 +0200 Subject: [PATCH] DATAMONGO-1291 - Made @Document usable as meta-annotation. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We now use Spring's AnnotationUtils.findAnnotation(…) for @Document lookup which enables the full power of Spring 4.2's composable annotations. Original pull request: #326. --- .../mapping/BasicMongoPersistentEntity.java | 3 +- .../BasicMongoPersistentEntityUnitTests.java | 28 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/BasicMongoPersistentEntity.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/BasicMongoPersistentEntity.java index 7c56c8c28..d182a9460 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/BasicMongoPersistentEntity.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/BasicMongoPersistentEntity.java @@ -26,6 +26,7 @@ import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.context.expression.BeanFactoryAccessor; import org.springframework.context.expression.BeanFactoryResolver; +import org.springframework.core.annotation.AnnotationUtils; import org.springframework.data.annotation.Id; import org.springframework.data.mapping.Association; import org.springframework.data.mapping.AssociationHandler; @@ -77,7 +78,7 @@ public class BasicMongoPersistentEntity extends BasicPersistentEntity rawType = typeInformation.getType(); String fallback = MongoCollectionUtils.getPreferredCollectionName(rawType); - Document document = rawType.getAnnotation(Document.class); + Document document = AnnotationUtils.findAnnotation(rawType, Document.class); this.expression = detectExpression(document); this.context = new StandardEvaluationContext(); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/BasicMongoPersistentEntityUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/BasicMongoPersistentEntityUnitTests.java index de378304f..a420c24d8 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/BasicMongoPersistentEntityUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/BasicMongoPersistentEntityUnitTests.java @@ -19,6 +19,11 @@ import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; import static org.mockito.Mockito.*; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -226,6 +231,18 @@ public class BasicMongoPersistentEntityUnitTests { verify(dbRefMock, times(1)).lazy(); } + /** + * @see DATAMONGO-1291 + */ + @Test + public void metaInformationShouldBeReadCorrectlyFromInheritedDocumentAnnotation() { + + BasicMongoPersistentEntity entity = new BasicMongoPersistentEntity( + ClassTypeInformation.from(DocumentWithCustomAnnotation.class)); + + assertThat(entity.getCollection(), is("collection-1")); + } + @Document(collection = "contacts") class Contact { @@ -261,4 +278,15 @@ public class BasicMongoPersistentEntityUnitTests { static class AnyDocument { } + + @CustomDocumentAnnotation + static class DocumentWithCustomAnnotation { + + } + + @Retention(RetentionPolicy.RUNTIME) + @Target({ ElementType.TYPE }) + @Document(collection = "collection-1") + static @interface CustomDocumentAnnotation { + } }