From d89835bd80eb90d04ebba79d8d4ac7767ac49704 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Mon, 3 Dec 2018 17:29:16 +0100 Subject: [PATCH] GH-232 Removed FunctionScan annotation Reoved FunctionScan annotation since it provides no additional value to the end user Preserved auto component scanning for Functions in package Updated filter to additionally scan for Supplier and Consumer Resolves #232 --- .../cloud/function/context/FunctionScan.java | 46 ------------------- ...ntextFunctionCatalogAutoConfiguration.java | 7 ++- ...FunctionCatalogAutoConfigurationTests.java | 2 - .../java/com/example/SampleApplication.java | 4 +- 4 files changed, 6 insertions(+), 53 deletions(-) delete mode 100644 spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/FunctionScan.java diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/FunctionScan.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/FunctionScan.java deleted file mode 100644 index 359192cac..000000000 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/FunctionScan.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.cloud.function.context; - -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import java.util.function.Function; - -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.FilterType; -import org.springframework.context.annotation.ComponentScan.Filter; - -/** - * Annotation that triggers scanning within the specified base packages for - * any class that is assignable to {@link Function}. For each detected Function - * class, a bean instance will be added to the context. The property key for - * providing base packages is: {@code spring.cloud.function.scan.packages} - * If no key is provided, the default base package is "functions". - * - * @author Mark Fisher - */ -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -@Documented -@ComponentScan(basePackages = "${spring.cloud.function.scan.packages:functions}", - includeFilters = @Filter(type = FilterType.ASSIGNABLE_TYPE, classes = Function.class)) -public @interface FunctionScan { - -} diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfiguration.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfiguration.java index 0ad7e2cc8..d7f32de56 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfiguration.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfiguration.java @@ -44,7 +44,6 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.cloud.function.context.FunctionCatalog; import org.springframework.cloud.function.context.FunctionRegistration; import org.springframework.cloud.function.context.FunctionRegistry; -import org.springframework.cloud.function.context.FunctionScan; import org.springframework.cloud.function.context.FunctionType; import org.springframework.cloud.function.context.catalog.FunctionInspector; import org.springframework.cloud.function.context.catalog.FunctionRegistrationEvent; @@ -61,8 +60,11 @@ import org.springframework.cloud.function.json.GsonMapper; import org.springframework.cloud.function.json.JacksonMapper; import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Conditional; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.FilterType; +import org.springframework.context.annotation.ComponentScan.Filter; import org.springframework.core.annotation.AnnotatedElementUtils; import org.springframework.core.type.StandardMethodMetadata; import org.springframework.stereotype.Component; @@ -81,9 +83,10 @@ import reactor.core.publisher.Mono; * @author Oleg Zhurakousky * @author Artem Bilan */ -@FunctionScan @Configuration @ConditionalOnMissingBean(FunctionCatalog.class) +@ComponentScan(basePackages = "${spring.cloud.function.scan.packages:functions}", + includeFilters = @Filter(type = FilterType.ASSIGNABLE_TYPE, classes = {Supplier.class, Function.class, Consumer.class})) public class ContextFunctionCatalogAutoConfiguration { static final String PREFERRED_MAPPER_PROPERTY = "spring.http.converters.preferred-json-mapper"; diff --git a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfigurationTests.java b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfigurationTests.java index f8ded7f41..70aa14a46 100644 --- a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfigurationTests.java +++ b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfigurationTests.java @@ -45,7 +45,6 @@ import org.springframework.cloud.function.compiler.CompiledFunctionFactory; import org.springframework.cloud.function.compiler.FunctionCompiler; import org.springframework.cloud.function.context.FunctionCatalog; import org.springframework.cloud.function.context.FunctionRegistration; -import org.springframework.cloud.function.context.FunctionScan; import org.springframework.cloud.function.context.catalog.FunctionInspector; import org.springframework.cloud.function.inject.FooConfiguration; import org.springframework.cloud.function.scan.ScannedFunction; @@ -742,7 +741,6 @@ public class ContextFunctionCatalogAutoConfigurationTests { @EnableAutoConfiguration @Configuration - @FunctionScan protected static class ComponentScanJarConfiguration { } diff --git a/spring-cloud-function-samples/function-sample/src/main/java/com/example/SampleApplication.java b/spring-cloud-function-samples/function-sample/src/main/java/com/example/SampleApplication.java index 54803ffb6..679dfcc53 100644 --- a/spring-cloud-function-samples/function-sample/src/main/java/com/example/SampleApplication.java +++ b/spring-cloud-function-samples/function-sample/src/main/java/com/example/SampleApplication.java @@ -1,5 +1,5 @@ /* - * Copyright 2017 the original author or authors. + * Copyright 2017-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,13 +23,11 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.function.compiler.FunctionCompiler; import org.springframework.cloud.function.compiler.proxy.LambdaCompilingFunction; -import org.springframework.cloud.function.context.FunctionScan; import org.springframework.context.annotation.Bean; import org.springframework.core.io.ByteArrayResource; import reactor.core.publisher.Flux; -@FunctionScan @SpringBootApplication public class SampleApplication {