From 8060ebae6a22e5360c08263e76b691d6da936387 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Sun, 13 Nov 2016 18:57:45 +0100 Subject: [PATCH] DATAMONGO-1444 - Polishing. Removed unused references to ConversionService from repository query implementations. --- .../query/AbstractReactiveMongoQuery.java | 12 ++---- .../query/ReactivePartTreeMongoQuery.java | 7 +--- .../query/ReactiveStringBasedMongoQuery.java | 17 ++++---- .../ReactiveMongoRepositoryFactory.java | 40 +++++-------------- .../performance/ReactivePerformanceTests.java | 10 ++--- ...eactiveStringBasedMongoQueryUnitTests.java | 16 +++----- 6 files changed, 33 insertions(+), 69 deletions(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/AbstractReactiveMongoQuery.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/AbstractReactiveMongoQuery.java index 1c36ccf93..0a2b8e97a 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/AbstractReactiveMongoQuery.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/AbstractReactiveMongoQuery.java @@ -15,8 +15,10 @@ */ package org.springframework.data.mongodb.repository.query; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + import org.reactivestreams.Publisher; -import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.converter.Converter; import org.springframework.data.convert.EntityInstantiators; import org.springframework.data.mongodb.core.MongoOperations; @@ -32,12 +34,8 @@ import org.springframework.data.mongodb.repository.query.ReactiveMongoQueryExecu import org.springframework.data.repository.query.ParameterAccessor; import org.springframework.data.repository.query.RepositoryQuery; import org.springframework.data.repository.query.ResultProcessor; -import org.springframework.data.repository.util.ReactiveWrapperConverters; import org.springframework.util.Assert; -import reactor.core.publisher.Flux; -import reactor.core.publisher.Mono; - /** * Base class for reactive {@link RepositoryQuery} implementations for MongoDB. * @@ -57,10 +55,8 @@ public abstract class AbstractReactiveMongoQuery implements RepositoryQuery { * * @param method must not be {@literal null}. * @param operations must not be {@literal null}. - * @param conversionService must not be {@literal null}. */ - public AbstractReactiveMongoQuery(ReactiveMongoQueryMethod method, ReactiveMongoOperations operations, - ConversionService conversionService) { + public AbstractReactiveMongoQuery(ReactiveMongoQueryMethod method, ReactiveMongoOperations operations) { Assert.notNull(method, "MongoQueryMethod must not be null!"); Assert.notNull(operations, "ReactiveMongoOperations must not be null!"); diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ReactivePartTreeMongoQuery.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ReactivePartTreeMongoQuery.java index 61d861008..e61bd8750 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ReactivePartTreeMongoQuery.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ReactivePartTreeMongoQuery.java @@ -16,13 +16,11 @@ package org.springframework.data.mongodb.repository.query; import org.bson.Document; -import org.springframework.core.convert.ConversionService; import org.springframework.data.mapping.context.MappingContext; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.ReactiveMongoOperations; import org.springframework.data.mongodb.core.mapping.MongoPersistentProperty; import org.springframework.data.mongodb.core.query.BasicQuery; -import org.springframework.data.mongodb.core.query.Field; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.TextCriteria; import org.springframework.data.repository.query.QueryMethod; @@ -53,11 +51,10 @@ public class ReactivePartTreeMongoQuery extends AbstractReactiveMongoQuery { * * @param method must not be {@literal null}. * @param mongoOperations must not be {@literal null}. - * @param conversionService must not be {@literal null}. */ - public ReactivePartTreeMongoQuery(ReactiveMongoQueryMethod method, ReactiveMongoOperations mongoOperations, ConversionService conversionService) { + public ReactivePartTreeMongoQuery(ReactiveMongoQueryMethod method, ReactiveMongoOperations mongoOperations) { - super(method, mongoOperations, conversionService); + super(method, mongoOperations); this.processor = method.getResultProcessor(); this.tree = new PartTree(method.getName(), processor.getReturnedType().getDomainType()); diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ReactiveStringBasedMongoQuery.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ReactiveStringBasedMongoQuery.java index c40f37502..badaea5e2 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ReactiveStringBasedMongoQuery.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ReactiveStringBasedMongoQuery.java @@ -20,7 +20,6 @@ import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.core.convert.ConversionService; import org.springframework.data.mongodb.core.MongoOperations; import org.springframework.data.mongodb.core.ReactiveMongoOperations; import org.springframework.data.mongodb.core.query.BasicQuery; @@ -54,17 +53,17 @@ public class ReactiveStringBasedMongoQuery extends AbstractReactiveMongoQuery { private final ExpressionEvaluatingParameterBinder parameterBinder; /** - * Creates a new {@link ReactiveStringBasedMongoQuery} for the given {@link MongoQueryMethod} and {@link MongoOperations}. + * Creates a new {@link ReactiveStringBasedMongoQuery} for the given {@link MongoQueryMethod} and + * {@link MongoOperations}. * * @param method must not be {@literal null}. * @param mongoOperations must not be {@literal null}. * @param expressionParser must not be {@literal null}. * @param evaluationContextProvider must not be {@literal null}. - * @param conversionService must not be {@literal null}. */ public ReactiveStringBasedMongoQuery(ReactiveMongoQueryMethod method, ReactiveMongoOperations mongoOperations, - SpelExpressionParser expressionParser, EvaluationContextProvider evaluationContextProvider, ConversionService conversionService) { - this(method.getAnnotatedQuery(), method, mongoOperations, expressionParser, evaluationContextProvider, conversionService); + SpelExpressionParser expressionParser, EvaluationContextProvider evaluationContextProvider) { + this(method.getAnnotatedQuery(), method, mongoOperations, expressionParser, evaluationContextProvider); } /** @@ -75,12 +74,12 @@ public class ReactiveStringBasedMongoQuery extends AbstractReactiveMongoQuery { * @param method must not be {@literal null}. * @param mongoOperations must not be {@literal null}. * @param expressionParser must not be {@literal null}. - * @param conversionService must not be {@literal null}. */ - public ReactiveStringBasedMongoQuery(String query, ReactiveMongoQueryMethod method, ReactiveMongoOperations mongoOperations, - SpelExpressionParser expressionParser, EvaluationContextProvider evaluationContextProvider, ConversionService conversionService) { + public ReactiveStringBasedMongoQuery(String query, ReactiveMongoQueryMethod method, + ReactiveMongoOperations mongoOperations, SpelExpressionParser expressionParser, + EvaluationContextProvider evaluationContextProvider) { - super(method, mongoOperations, conversionService); + super(method, mongoOperations); Assert.notNull(query, "Query must not be null!"); Assert.notNull(expressionParser, "SpelExpressionParser must not be null!"); diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/ReactiveMongoRepositoryFactory.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/ReactiveMongoRepositoryFactory.java index 26e259318..0e84e6d9b 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/ReactiveMongoRepositoryFactory.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/ReactiveMongoRepositoryFactory.java @@ -15,13 +15,14 @@ */ package org.springframework.data.mongodb.repository.support; +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; + import java.io.Serializable; import java.lang.reflect.Method; import java.util.Arrays; import org.reactivestreams.Publisher; -import org.springframework.core.convert.ConversionService; -import org.springframework.core.convert.support.DefaultConversionService; import org.springframework.dao.InvalidDataAccessApiUsageException; import org.springframework.data.mapping.context.MappingContext; import org.springframework.data.mapping.model.MappingException; @@ -29,7 +30,6 @@ import org.springframework.data.mongodb.core.ReactiveMongoOperations; import org.springframework.data.mongodb.core.mapping.MongoPersistentEntity; import org.springframework.data.mongodb.core.mapping.MongoPersistentProperty; import org.springframework.data.mongodb.repository.query.MongoEntityInformation; -import org.springframework.data.mongodb.repository.query.MongoQueryMethod; import org.springframework.data.mongodb.repository.query.PartTreeMongoQuery; import org.springframework.data.mongodb.repository.query.ReactiveMongoQueryMethod; import org.springframework.data.mongodb.repository.query.ReactivePartTreeMongoQuery; @@ -43,7 +43,6 @@ import org.springframework.data.repository.query.EvaluationContextProvider; import org.springframework.data.repository.query.QueryLookupStrategy; import org.springframework.data.repository.query.QueryLookupStrategy.Key; import org.springframework.data.repository.query.RepositoryQuery; -import org.springframework.data.repository.util.QueryExecutionConverters; import org.springframework.data.repository.util.ReactiveWrapperConverters; import org.springframework.data.repository.util.ReactiveWrappers; import org.springframework.expression.spel.standard.SpelExpressionParser; @@ -55,6 +54,7 @@ import org.springframework.util.ClassUtils; * * @author Mark Paluch * @author Christoph Strobl + * @author Oliver Gierke * @since 2.0 */ public class ReactiveMongoRepositoryFactory extends RepositoryFactorySupport { @@ -63,7 +63,6 @@ public class ReactiveMongoRepositoryFactory extends RepositoryFactorySupport { private final ReactiveMongoOperations operations; private final MappingContext, MongoPersistentProperty> mappingContext; - private final ConversionService conversionService; /** * Creates a new {@link ReactiveMongoRepositoryFactory} with the given {@link ReactiveMongoOperations}. @@ -76,12 +75,6 @@ public class ReactiveMongoRepositoryFactory extends RepositoryFactorySupport { this.operations = mongoOperations; this.mappingContext = mongoOperations.getConverter().getMappingContext(); - - DefaultConversionService conversionService = new DefaultConversionService(); - ReactiveWrapperConverters.registerConvertersIn(conversionService); - - this.conversionService = conversionService; - setConversionService(conversionService); } /* @@ -111,7 +104,7 @@ public class ReactiveMongoRepositoryFactory extends RepositoryFactorySupport { */ @Override protected QueryLookupStrategy getQueryLookupStrategy(Key key, EvaluationContextProvider evaluationContextProvider) { - return new MongoQueryLookupStrategy(operations, evaluationContextProvider, mappingContext, conversionService); + return new MongoQueryLookupStrategy(operations, evaluationContextProvider, mappingContext); } /* @@ -131,7 +124,7 @@ public class ReactiveMongoRepositoryFactory extends RepositoryFactorySupport { if (!ReactiveWrappers.isAvailable()) { throw new InvalidDataAccessApiUsageException( - String.format("Cannot implement Repository %s without reactive library support.", + String.format("Cannot implement repository %s without reactive library support.", repositoryMetadata.getRepositoryInterface().getName())); } @@ -189,22 +182,12 @@ public class ReactiveMongoRepositoryFactory extends RepositoryFactorySupport { * * @author Mark Paluch */ + @RequiredArgsConstructor(access = AccessLevel.PACKAGE) private static class MongoQueryLookupStrategy implements QueryLookupStrategy { private final ReactiveMongoOperations operations; private final EvaluationContextProvider evaluationContextProvider; - MappingContext, MongoPersistentProperty> mappingContext; - final ConversionService conversionService; - - MongoQueryLookupStrategy(ReactiveMongoOperations operations, EvaluationContextProvider evaluationContextProvider, - MappingContext, MongoPersistentProperty> mappingContext, - ConversionService conversionService) { - - this.operations = operations; - this.evaluationContextProvider = evaluationContextProvider; - this.mappingContext = mappingContext; - this.conversionService = conversionService; - } + private final MappingContext, MongoPersistentProperty> mappingContext; /* * (non-Javadoc) @@ -220,12 +203,11 @@ public class ReactiveMongoRepositoryFactory extends RepositoryFactorySupport { if (namedQueries.hasQuery(namedQueryName)) { String namedQuery = namedQueries.getQuery(namedQueryName); return new ReactiveStringBasedMongoQuery(namedQuery, queryMethod, operations, EXPRESSION_PARSER, - evaluationContextProvider, conversionService); + evaluationContextProvider); } else if (queryMethod.hasAnnotatedQuery()) { - return new ReactiveStringBasedMongoQuery(queryMethod, operations, EXPRESSION_PARSER, evaluationContextProvider, - conversionService); + return new ReactiveStringBasedMongoQuery(queryMethod, operations, EXPRESSION_PARSER, evaluationContextProvider); } else { - return new ReactivePartTreeMongoQuery(queryMethod, operations, conversionService); + return new ReactivePartTreeMongoQuery(queryMethod, operations); } } } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/performance/ReactivePerformanceTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/performance/ReactivePerformanceTests.java index e5dee0659..a738671c7 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/performance/ReactivePerformanceTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/performance/ReactivePerformanceTests.java @@ -19,6 +19,9 @@ import static org.springframework.data.mongodb.core.query.Criteria.*; import static org.springframework.data.mongodb.core.query.Query.*; import static org.springframework.util.Assert.*; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Arrays; @@ -39,7 +42,6 @@ import org.bson.types.ObjectId; import org.junit.Before; import org.junit.Test; import org.springframework.core.Constants; -import org.springframework.core.convert.support.GenericConversionService; import org.springframework.data.annotation.PersistenceConstructor; import org.springframework.data.mongodb.core.ReactiveMongoOperations; import org.springframework.data.mongodb.core.ReactiveMongoTemplate; @@ -68,9 +70,6 @@ import com.mongodb.reactivestreams.client.MongoClients; import com.mongodb.reactivestreams.client.MongoCollection; import com.mongodb.reactivestreams.client.MongoDatabase; -import reactor.core.publisher.Flux; -import reactor.core.publisher.Mono; - /** * Test class to execute performance tests for plain Reactive Streams MongoDB driver usage, * {@link ReactiveMongoOperations} and the repositories abstraction. @@ -131,10 +130,7 @@ public class ReactivePerformanceTests { operations = new ReactiveMongoTemplate(mongoDbFactory, converter); ReactiveMongoRepositoryFactory factory = new ReactiveMongoRepositoryFactory(operations); - factory.setConversionService(new GenericConversionService()); - repository = factory.getRepository(ReactivePersonRepository.class); - } /** diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/ReactiveStringBasedMongoQueryUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/ReactiveStringBasedMongoQueryUnitTests.java index 3e2188117..d7b184f7b 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/ReactiveStringBasedMongoQueryUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/ReactiveStringBasedMongoQueryUnitTests.java @@ -19,6 +19,9 @@ import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; import static org.mockito.Mockito.*; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + import java.lang.reflect.Method; import java.util.Collections; import java.util.Map; @@ -32,7 +35,6 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; -import org.springframework.core.convert.support.DefaultConversionService; import org.springframework.data.mongodb.core.ReactiveMongoOperations; import org.springframework.data.mongodb.core.convert.DbRefResolver; import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper; @@ -48,13 +50,8 @@ import org.springframework.data.projection.SpelAwareProxyProjectionFactory; import org.springframework.data.repository.Repository; import org.springframework.data.repository.core.support.DefaultRepositoryMetadata; import org.springframework.data.repository.query.DefaultEvaluationContextProvider; -import org.springframework.data.repository.util.QueryExecutionConverters; -import org.springframework.data.repository.util.ReactiveWrapperConverters; import org.springframework.expression.spel.standard.SpelExpressionParser; -import reactor.core.publisher.Flux; -import reactor.core.publisher.Mono; - /** * Unit tests for {@link ReactiveStringBasedMongoQuery}. * @@ -250,15 +247,12 @@ public class ReactiveStringBasedMongoQueryUnitTests { private ReactiveStringBasedMongoQuery createQueryForMethod(String name, Class... parameters) throws Exception { - DefaultConversionService conversionService = new DefaultConversionService(); - ReactiveWrapperConverters.registerConvertersIn(conversionService); - Method method = SampleRepository.class.getMethod(name, parameters); ProjectionFactory factory = new SpelAwareProxyProjectionFactory(); ReactiveMongoQueryMethod queryMethod = new ReactiveMongoQueryMethod(method, new DefaultRepositoryMetadata(SampleRepository.class), factory, converter.getMappingContext()); - return new ReactiveStringBasedMongoQuery(queryMethod, operations, PARSER, DefaultEvaluationContextProvider.INSTANCE, - conversionService); + return new ReactiveStringBasedMongoQuery(queryMethod, operations, PARSER, + DefaultEvaluationContextProvider.INSTANCE); } private interface SampleRepository extends Repository {