From 440b123cc4d0c47a73ec04f20d5785958cea02be Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Wed, 29 Sep 2021 17:56:08 +0100 Subject: [PATCH] Minor refactoring Rename AnnotatedDataFetcherConfigurer -> AnnotatedControllerConfigurer, since handler methods are now not only data fetchers but also batch loaders. Move DataFetcherHandlerMethod and BatchLoaderHandlerMethod into the support package next to AnnotatedControllerConfigurer where they're used. See gh-130 --- .../graphql/boot/GraphQlAutoConfiguration.java | 6 +++--- spring-graphql-docs/src/docs/asciidoc/boot-starter.adoc | 2 +- spring-graphql-docs/src/docs/asciidoc/index.adoc | 4 ++-- ...Configurer.java => AnnotatedControllerConfigurer.java} | 8 +++----- .../support/BatchLoaderHandlerMethod.java} | 8 +++++--- .../support}/DataFetcherHandlerMethod.java | 6 +++++- .../annotation/support/BatchMappingDetectionTests.java | 4 ++-- .../annotation/support/BatchMappingInvocationTests.java | 6 +++--- .../annotation/support/SchemaMappingDetectionTests.java | 8 ++++---- .../annotation/support/SchemaMappingInvocationTests.java | 4 ++-- 10 files changed, 30 insertions(+), 26 deletions(-) rename spring-graphql/src/main/java/org/springframework/graphql/data/method/annotation/support/{AnnotatedDataFetcherConfigurer.java => AnnotatedControllerConfigurer.java} (97%) rename spring-graphql/src/main/java/org/springframework/graphql/data/method/{BatchLoadHandlerMethod.java => annotation/support/BatchLoaderHandlerMethod.java} (90%) rename spring-graphql/src/main/java/org/springframework/graphql/data/method/{ => annotation/support}/DataFetcherHandlerMethod.java (92%) diff --git a/graphql-spring-boot-starter/src/main/java/org/springframework/graphql/boot/GraphQlAutoConfiguration.java b/graphql-spring-boot-starter/src/main/java/org/springframework/graphql/boot/GraphQlAutoConfiguration.java index b973fee4..c06b04d7 100644 --- a/graphql-spring-boot-starter/src/main/java/org/springframework/graphql/boot/GraphQlAutoConfiguration.java +++ b/graphql-spring-boot-starter/src/main/java/org/springframework/graphql/boot/GraphQlAutoConfiguration.java @@ -36,7 +36,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.Resource; import org.springframework.core.io.support.ResourcePatternResolver; -import org.springframework.graphql.data.method.annotation.support.AnnotatedDataFetcherConfigurer; +import org.springframework.graphql.data.method.annotation.support.AnnotatedControllerConfigurer; import org.springframework.graphql.execution.DataFetcherExceptionResolver; import org.springframework.graphql.execution.GraphQlSource; import org.springframework.graphql.execution.MissingSchemaException; @@ -58,8 +58,8 @@ public class GraphQlAutoConfiguration { private static final Log logger = LogFactory.getLog(GraphQlAutoConfiguration.class); @Bean - public AnnotatedDataFetcherConfigurer annotatedDataFetcherConfigurer() { - return new AnnotatedDataFetcherConfigurer(); + public AnnotatedControllerConfigurer annotatedControllerConfigurer() { + return new AnnotatedControllerConfigurer(); } @Bean diff --git a/spring-graphql-docs/src/docs/asciidoc/boot-starter.adoc b/spring-graphql-docs/src/docs/asciidoc/boot-starter.adoc index a8b1cb50..e71b44c9 100644 --- a/spring-graphql-docs/src/docs/asciidoc/boot-starter.adoc +++ b/spring-graphql-docs/src/docs/asciidoc/boot-starter.adoc @@ -123,7 +123,7 @@ starter detects such beans adds them to <>. The Boot -starter declares a `RuntimeWiringConfigurer` called `AnnotatedDataFetcherConfigurer` that +starter declares a `RuntimeWiringConfigurer` called `AnnotatedControllerConfigurer` that detects `@Controller` classes with annotated handler methods and registers those as ``DataFetcher``s. diff --git a/spring-graphql-docs/src/docs/asciidoc/index.adoc b/spring-graphql-docs/src/docs/asciidoc/index.adoc index 4cacc5a9..a434d4ba 100644 --- a/spring-graphql-docs/src/docs/asciidoc/index.adoc +++ b/spring-graphql-docs/src/docs/asciidoc/index.adoc @@ -439,10 +439,10 @@ support for detecting `@Controller` and `@Component` classes on the classpath an auto-registering bean definitions for them. It also acts as a stereotype for the annotated class, indicating its role as a data fetching component in a GraphQL application. -`AnnotatedDataFetcherConfigurer` detects `@Controller` beans and registers their +`AnnotatedControllerConfigurer` detects `@Controller` beans and registers their annotated handler methods as ``DataFetcher``s via `RuntimeWiring.Builder`. It is an implementation of `RuntimeWiringConfigurer` which can be added to `GraphQlSource.Builder`. -The Spring Boot starter automatically declares `AnnotatedDataFetcherConfigurer` as a bean +The Spring Boot starter automatically declares `AnnotatedControllerConfigurer` as a bean and adds all `RuntimeWiringConfigurer` beans to `GraphQlSource.Builder` and that enables support for annotated ``DataFetcher``s, see <>. diff --git a/spring-graphql/src/main/java/org/springframework/graphql/data/method/annotation/support/AnnotatedDataFetcherConfigurer.java b/spring-graphql/src/main/java/org/springframework/graphql/data/method/annotation/support/AnnotatedControllerConfigurer.java similarity index 97% rename from spring-graphql/src/main/java/org/springframework/graphql/data/method/annotation/support/AnnotatedDataFetcherConfigurer.java rename to spring-graphql/src/main/java/org/springframework/graphql/data/method/annotation/support/AnnotatedControllerConfigurer.java index 970851a8..38603e3b 100644 --- a/spring-graphql/src/main/java/org/springframework/graphql/data/method/annotation/support/AnnotatedDataFetcherConfigurer.java +++ b/spring-graphql/src/main/java/org/springframework/graphql/data/method/annotation/support/AnnotatedControllerConfigurer.java @@ -45,8 +45,6 @@ import org.springframework.core.KotlinDetector; import org.springframework.core.MethodIntrospector; import org.springframework.core.MethodParameter; import org.springframework.core.annotation.AnnotatedElementUtils; -import org.springframework.graphql.data.method.BatchLoadHandlerMethod; -import org.springframework.graphql.data.method.DataFetcherHandlerMethod; import org.springframework.graphql.data.method.HandlerMethod; import org.springframework.graphql.data.method.HandlerMethodArgumentResolver; import org.springframework.graphql.data.method.HandlerMethodArgumentResolverComposite; @@ -68,10 +66,10 @@ import org.springframework.util.StringUtils; * @author Rossen Stoyanchev * @since 1.0.0 */ -public class AnnotatedDataFetcherConfigurer +public class AnnotatedControllerConfigurer implements ApplicationContextAware, InitializingBean, RuntimeWiringConfigurer { - private final static Log logger = LogFactory.getLog(AnnotatedDataFetcherConfigurer.class); + private final static Log logger = LogFactory.getLog(AnnotatedControllerConfigurer.class); /** * Bean name prefix for target beans behind scoped proxies. Used to exclude those @@ -289,7 +287,7 @@ public class AnnotatedDataFetcherConfigurer } String dataLoaderKey = info.getCoordinates().toString(); - BatchLoadHandlerMethod invocable = new BatchLoadHandlerMethod(info.getHandlerMethod()); + BatchLoaderHandlerMethod invocable = new BatchLoaderHandlerMethod(info.getHandlerMethod()); BatchLoaderRegistry registry = obtainApplicationContext().getBean(BatchLoaderRegistry.class); Class clazz = info.getHandlerMethod().getReturnType().getParameterType(); diff --git a/spring-graphql/src/main/java/org/springframework/graphql/data/method/BatchLoadHandlerMethod.java b/spring-graphql/src/main/java/org/springframework/graphql/data/method/annotation/support/BatchLoaderHandlerMethod.java similarity index 90% rename from spring-graphql/src/main/java/org/springframework/graphql/data/method/BatchLoadHandlerMethod.java rename to spring-graphql/src/main/java/org/springframework/graphql/data/method/annotation/support/BatchLoaderHandlerMethod.java index 417e9526..bcc1d74e 100644 --- a/spring-graphql/src/main/java/org/springframework/graphql/data/method/BatchLoadHandlerMethod.java +++ b/spring-graphql/src/main/java/org/springframework/graphql/data/method/annotation/support/BatchLoaderHandlerMethod.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.graphql.data.method; +package org.springframework.graphql.data.method.annotation.support; import java.util.Collection; import java.util.Map; @@ -24,6 +24,8 @@ import reactor.core.publisher.Mono; import org.springframework.core.CollectionFactory; import org.springframework.core.MethodParameter; +import org.springframework.graphql.data.method.HandlerMethod; +import org.springframework.graphql.data.method.InvocableHandlerMethodSupport; import org.springframework.lang.Nullable; import org.springframework.util.Assert; @@ -35,10 +37,10 @@ import org.springframework.util.Assert; * @author Rossen Stoyanchev * @since 1.0.0 */ -public class BatchLoadHandlerMethod extends InvocableHandlerMethodSupport { +public class BatchLoaderHandlerMethod extends InvocableHandlerMethodSupport { - public BatchLoadHandlerMethod(HandlerMethod handlerMethod) { + public BatchLoaderHandlerMethod(HandlerMethod handlerMethod) { super(handlerMethod); } diff --git a/spring-graphql/src/main/java/org/springframework/graphql/data/method/DataFetcherHandlerMethod.java b/spring-graphql/src/main/java/org/springframework/graphql/data/method/annotation/support/DataFetcherHandlerMethod.java similarity index 92% rename from spring-graphql/src/main/java/org/springframework/graphql/data/method/DataFetcherHandlerMethod.java rename to spring-graphql/src/main/java/org/springframework/graphql/data/method/annotation/support/DataFetcherHandlerMethod.java index a29aa686..70e88b3f 100644 --- a/spring-graphql/src/main/java/org/springframework/graphql/data/method/DataFetcherHandlerMethod.java +++ b/spring-graphql/src/main/java/org/springframework/graphql/data/method/annotation/support/DataFetcherHandlerMethod.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.graphql.data.method; +package org.springframework.graphql.data.method.annotation.support; import java.util.Arrays; @@ -22,6 +22,10 @@ import graphql.schema.DataFetchingEnvironment; import org.springframework.core.DefaultParameterNameDiscoverer; import org.springframework.core.MethodParameter; import org.springframework.core.ParameterNameDiscoverer; +import org.springframework.graphql.data.method.HandlerMethod; +import org.springframework.graphql.data.method.HandlerMethodArgumentResolver; +import org.springframework.graphql.data.method.HandlerMethodArgumentResolverComposite; +import org.springframework.graphql.data.method.InvocableHandlerMethodSupport; import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.ObjectUtils; diff --git a/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/BatchMappingDetectionTests.java b/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/BatchMappingDetectionTests.java index c20ce2a5..ee5dce3e 100644 --- a/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/BatchMappingDetectionTests.java +++ b/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/BatchMappingDetectionTests.java @@ -39,7 +39,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; /** - * Unit tests for {@link AnnotatedDataFetcherConfigurer}, focusing on detection + * Unit tests for {@link AnnotatedControllerConfigurer}, focusing on detection * and mapping of handler methods to schema fields. * * @author Rossen Stoyanchev @@ -84,7 +84,7 @@ public class BatchMappingDetectionTests { appContext.registerBean(BatchLoaderRegistry.class, () -> this.batchLoaderRegistry); appContext.refresh(); - AnnotatedDataFetcherConfigurer configurer = new AnnotatedDataFetcherConfigurer(); + AnnotatedControllerConfigurer configurer = new AnnotatedControllerConfigurer(); configurer.setApplicationContext(appContext); configurer.afterPropertiesSet(); diff --git a/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/BatchMappingInvocationTests.java b/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/BatchMappingInvocationTests.java index 8ad27b98..3595e6f2 100644 --- a/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/BatchMappingInvocationTests.java +++ b/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/BatchMappingInvocationTests.java @@ -260,7 +260,7 @@ public class BatchMappingInvocationTests { private static class CourseConfig { @Bean - public GraphQlSource graphQlSource(AnnotatedDataFetcherConfigurer configurer) { + public GraphQlSource graphQlSource(AnnotatedControllerConfigurer configurer) { return GraphQlSource.builder() .schemaResources(new ByteArrayResource(schema.getBytes(StandardCharsets.UTF_8))) .configureRuntimeWiring(configurer) @@ -275,8 +275,8 @@ public class BatchMappingInvocationTests { } @Bean - public AnnotatedDataFetcherConfigurer annotatedDataFetcherConfigurer() { - return new AnnotatedDataFetcherConfigurer(); + public AnnotatedControllerConfigurer annotatedDataFetcherConfigurer() { + return new AnnotatedControllerConfigurer(); } @Bean diff --git a/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/SchemaMappingDetectionTests.java b/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/SchemaMappingDetectionTests.java index df3ca32c..50f3df1e 100644 --- a/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/SchemaMappingDetectionTests.java +++ b/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/SchemaMappingDetectionTests.java @@ -37,7 +37,7 @@ import org.springframework.util.StringUtils; import static org.assertj.core.api.Assertions.assertThat; /** - * Unit tests for {@link AnnotatedDataFetcherConfigurer}, focusing on detection + * Unit tests for {@link AnnotatedControllerConfigurer}, focusing on detection * and mapping of handler methods to schema fields. * * @author Rossen Stoyanchev @@ -85,7 +85,7 @@ public class SchemaMappingDetectionTests { appContext.registerBean(handlerType); appContext.refresh(); - AnnotatedDataFetcherConfigurer configurer = new AnnotatedDataFetcherConfigurer(); + AnnotatedControllerConfigurer configurer = new AnnotatedControllerConfigurer(); configurer.setApplicationContext(appContext); configurer.afterPropertiesSet(); @@ -101,8 +101,8 @@ public class SchemaMappingDetectionTests { String typeName = strings[0]; String field = strings[1]; - AnnotatedDataFetcherConfigurer.SchemaMappingDataFetcher dataFetcher = - (AnnotatedDataFetcherConfigurer.SchemaMappingDataFetcher) map.get(typeName).get(field); + AnnotatedControllerConfigurer.SchemaMappingDataFetcher dataFetcher = + (AnnotatedControllerConfigurer.SchemaMappingDataFetcher) map.get(typeName).get(field); assertThat(dataFetcher.getHandlerMethod().getMethod().getName()).isEqualTo(methodName); } diff --git a/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/SchemaMappingInvocationTests.java b/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/SchemaMappingInvocationTests.java index aedc8b38..79dbb091 100644 --- a/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/SchemaMappingInvocationTests.java +++ b/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/SchemaMappingInvocationTests.java @@ -240,8 +240,8 @@ public class SchemaMappingInvocationTests { } @Bean - public AnnotatedDataFetcherConfigurer annotatedDataFetcherConfigurer() { - return new AnnotatedDataFetcherConfigurer(); + public AnnotatedControllerConfigurer annotatedDataFetcherConfigurer() { + return new AnnotatedControllerConfigurer(); } @Bean