You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by li...@apache.org on 2019/03/14 08:27:28 UTC
[incubator-dubbo] branch master updated: Merge pull request #3639,
Add equivalent annotation support for MethodConfig.
This is an automated email from the ASF dual-hosted git repository.
liujun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git
The following commit(s) were added to refs/heads/master by this push:
new 08d5f15 Merge pull request #3639, Add equivalent annotation support for MethodConfig.
08d5f15 is described below
commit 08d5f15a4cb5ea014eb817b1b1106c8fae449998
Author: cvictory <sh...@gmail.com>
AuthorDate: Thu Mar 14 16:27:11 2019 +0800
Merge pull request #3639, Add equivalent annotation support for MethodConfig.
Fixes #2045
---
.../org/apache/dubbo/config/ArgumentConfig.java | 12 +++-
.../java/org/apache/dubbo/config/MethodConfig.java | 45 +++++++++++++-
.../org/apache/dubbo/config/ReferenceConfig.java | 1 +
.../org/apache/dubbo/config/ServiceConfig.java | 1 +
.../apache/dubbo/config/annotation/Argument.java} | 37 +++++++-----
.../org/apache/dubbo/config/annotation/Method.java | 69 ++++++++++++++++++++++
.../apache/dubbo/config/annotation/Reference.java | 6 ++
.../apache/dubbo/config/annotation/Service.java | 6 ++
.../apache/dubbo/config/AbstractConfigTest.java | 19 ++++++
.../org/apache/dubbo/config/MethodConfigTest.java | 54 ++++++++++++++++-
.../apache/dubbo/config/ReferenceConfigTest.java | 31 ++++++++++
.../factory/annotation/ReferenceBeanBuilder.java | 13 ++++
.../ServiceAnnotationBeanPostProcessor.java | 8 ++-
.../dubbo/config/spring/util/AnnotationUtils.java | 13 +++-
.../annotation/consumer/AnnotationAction.java | 5 +-
15 files changed, 298 insertions(+), 22 deletions(-)
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ArgumentConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ArgumentConfig.java
index 61db01f..74d906c 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ArgumentConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ArgumentConfig.java
@@ -16,6 +16,7 @@
*/
package org.apache.dubbo.config;
+import org.apache.dubbo.config.annotation.Argument;
import org.apache.dubbo.config.support.Parameter;
import java.io.Serializable;
@@ -44,6 +45,15 @@ public class ArgumentConfig implements Serializable {
*/
private Boolean callback;
+ public ArgumentConfig() {
+ }
+
+ public ArgumentConfig(Argument argument) {
+ this.index = argument.index();
+ this.type = argument.type();
+ this.callback = argument.callback();
+ }
+
@Parameter(excluded = true)
public Integer getIndex() {
return index;
@@ -70,4 +80,4 @@ public class ArgumentConfig implements Serializable {
return callback;
}
-}
\ No newline at end of file
+}
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/MethodConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/MethodConfig.java
index d65c665..c9478d4 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/MethodConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/MethodConfig.java
@@ -18,8 +18,11 @@ package org.apache.dubbo.config;
import org.apache.dubbo.common.Constants;
import org.apache.dubbo.common.utils.StringUtils;
+import org.apache.dubbo.config.annotation.Method;
import org.apache.dubbo.config.support.Parameter;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
/**
@@ -117,6 +120,46 @@ public class MethodConfig extends AbstractMethodConfig {
return name;
}
+ public MethodConfig() {
+ }
+
+ public MethodConfig(Method method) {
+ appendAnnotation(Method.class, method);
+
+ this.setReturn(method.isReturn());
+
+ if(!"".equals(method.oninvoke())){
+ this.setOninvoke(method.oninvoke());
+ }
+ if(!"".equals(method.onreturn())){
+ this.setOnreturn(method.onreturn());
+ }
+ if(!"".equals(method.onthrow())){
+ this.setOnthrow(method.onthrow());
+ }
+
+ if (method.arguments() != null && method.arguments().length != 0) {
+ List<ArgumentConfig> argumentConfigs = new ArrayList<ArgumentConfig>(method.arguments().length);
+ this.setArguments(argumentConfigs);
+ for (int i = 0; i < method.arguments().length; i++) {
+ ArgumentConfig argumentConfig = new ArgumentConfig(method.arguments()[i]);
+ argumentConfigs.add(argumentConfig);
+ }
+ }
+ }
+
+ public static List<MethodConfig> constructMethodConfig(Method[] methods) {
+ if (methods != null && methods.length != 0) {
+ List<MethodConfig> methodConfigs = new ArrayList<MethodConfig>(methods.length);
+ for (int i = 0; i < methods.length; i++) {
+ MethodConfig methodConfig = new MethodConfig(methods[i]);
+ methodConfigs.add(methodConfig);
+ }
+ return methodConfigs;
+ }
+ return Collections.emptyList();
+ }
+
public void setName(String name) {
checkMethodName("name", name);
this.name = name;
@@ -279,4 +322,4 @@ public class MethodConfig extends AbstractMethodConfig {
+ (StringUtils.isEmpty(serviceId) ? "" : ("." + serviceId))
+ "." + getName();
}
-}
\ No newline at end of file
+}
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
index a7bbf13..b2d5fcd 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
@@ -178,6 +178,7 @@ public class ReferenceConfig<T> extends AbstractReferenceConfig {
public ReferenceConfig(Reference reference) {
appendAnnotation(Reference.class, reference);
+ setMethods(MethodConfig.constructMethodConfig(reference.methods()));
}
public URL toUrl() {
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
index 7cca8cc..2c640ca 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
@@ -169,6 +169,7 @@ public class ServiceConfig<T> extends AbstractServiceConfig {
public ServiceConfig(Service service) {
appendAnnotation(Service.class, service);
+ setMethods(MethodConfig.constructMethodConfig(service.methods()));
}
@Deprecated
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/annotation/consumer/AnnotationAction.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/annotation/Argument.java
similarity index 56%
copy from dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/annotation/consumer/AnnotationAction.java
copy to dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/annotation/Argument.java
index 35d94fe..6a0da8e 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/annotation/consumer/AnnotationAction.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/annotation/Argument.java
@@ -14,24 +14,31 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.dubbo.config.spring.annotation.consumer;
+package org.apache.dubbo.config.annotation;
-import org.apache.dubbo.config.annotation.Reference;
-import org.apache.dubbo.config.spring.api.DemoService;
-
-import org.springframework.stereotype.Controller;
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
/**
- * AnnotationAction
+ * @since 2.6.5
+ *
+ * 2018/9/29
*/
-@Controller("annotationAction")
-public class AnnotationAction {
-
- @Reference(version = "1.2")
- private DemoService demoService;
+@Documented
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.ANNOTATION_TYPE})
+@Inherited
+public @interface Argument {
+ //argument: index -1 represents not set
+ int index() default -1;
- public String doSayName(String name) {
- return demoService.sayName(name);
- }
+ //argument type
+ String type() default "";
-}
\ No newline at end of file
+ //callback interface
+ boolean callback() default false;
+}
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/annotation/Method.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/annotation/Method.java
new file mode 100644
index 0000000..0cdc97c
--- /dev/null
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/annotation/Method.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.dubbo.config.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @since 2.6.5
+ * *
+ * * 2018/9/29
+ */
+@Documented
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.ANNOTATION_TYPE})
+@Inherited
+public @interface Method {
+ String name();
+
+ int timeout() default -1;
+
+ int retries() default -1;
+
+ String loadbalance() default "";
+
+ boolean async() default false;
+
+ boolean sent() default true;
+
+ int actives() default 0;
+
+ int executes() default 0;
+
+ boolean deprecated() default false;
+
+ boolean sticky() default false;
+
+ boolean isReturn() default true;
+
+ String oninvoke() default "";
+
+ String onreturn() default "";
+
+ String onthrow() default "";
+
+ String cache() default "";
+
+ String validation() default "";
+
+ Argument[] arguments() default {};
+}
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/annotation/Reference.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/annotation/Reference.java
index 9aaea67..bdbbd35 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/annotation/Reference.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/annotation/Reference.java
@@ -256,4 +256,10 @@ public @interface Reference {
* Protocol spring bean names
*/
String protocol() default "";
+
+ /**
+ * methods support
+ * @return
+ */
+ Method[] methods() default {};
}
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/annotation/Service.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/annotation/Service.java
index 6f956f5..2e6f9b6 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/annotation/Service.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/annotation/Service.java
@@ -268,4 +268,10 @@ public @interface Service {
* Service tag name
*/
String tag() default "";
+
+ /**
+ * methods support
+ * @return
+ */
+ Method[] methods() default {};
}
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractConfigTest.java
index d95b2de..2d40cc3 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractConfigTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractConfigTest.java
@@ -468,6 +468,12 @@ public class AbstractConfigTest {
}
@Retention(RetentionPolicy.RUNTIME)
+ @Target({ElementType.ANNOTATION_TYPE})
+ public @interface ConfigField {
+ String value() default "";
+ }
+
+ @Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.ANNOTATION_TYPE})
public @interface Config {
Class<?> interfaceClass() default void.class;
@@ -479,6 +485,10 @@ public class AbstractConfigTest {
String[] listener() default {};
String[] parameters() default {};
+
+ ConfigField[] configFields() default {};
+
+ ConfigField configField() default @ConfigField;
}
private static class OverrideConfig extends AbstractInterfaceConfig {
@@ -735,6 +745,7 @@ public class AbstractConfigTest {
private String filter;
private String listener;
private Map<String, String> parameters;
+ private String[] configFields;
public Class getInterface() {
return interfaceClass;
@@ -767,5 +778,13 @@ public class AbstractConfigTest {
public void setParameters(Map<String, String> parameters) {
this.parameters = parameters;
}
+
+ public String[] getConfigFields() {
+ return configFields;
+ }
+
+ public void setConfigFields(String[] configFields) {
+ this.configFields = configFields;
+ }
}
}
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/MethodConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/MethodConfigTest.java
index 862c999..1d976d7 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/MethodConfigTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/MethodConfigTest.java
@@ -18,23 +18,75 @@
package org.apache.dubbo.config;
import org.apache.dubbo.common.Constants;
+import org.apache.dubbo.config.annotation.Argument;
+import org.apache.dubbo.config.annotation.Method;
+import org.apache.dubbo.config.annotation.Reference;
import org.hamcrest.Matchers;
import org.junit.jupiter.api.Test;
import java.util.Collections;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
+import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.contains;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.hasEntry;
import static org.hamcrest.Matchers.hasKey;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.not;
-import static org.hamcrest.MatcherAssert.assertThat;
public class MethodConfigTest {
+ private static final String METHOD_NAME = "sayHello";
+ private static final int TIMEOUT = 1300;
+ private static final int RETRIES = 4;
+ private static final String LOADBALANCE = "random";
+ private static final boolean ASYNC = true;
+ private static final int ACTIVES = 3;
+ private static final int EXECUTES = 5;
+ private static final boolean DEPERECATED = true;
+ private static final boolean STICKY = true;
+ private static final String ONINVOKE = "i";
+ private static final String ONTHROW = "t";
+ private static final String ONRETURN = "r";
+ private static final String CACHE = "c";
+ private static final String VALIDATION = "v";
+ private static final int ARGUMENTS_INDEX = 24;
+ private static final boolean ARGUMENTS_CALLBACK = true;
+ private static final String ARGUMENTS_TYPE = "sss";
+
+ @Reference(methods = {@Method(name = METHOD_NAME, timeout = TIMEOUT, retries = RETRIES, loadbalance = LOADBALANCE, async = ASYNC,
+ actives = ACTIVES, executes = EXECUTES, deprecated = DEPERECATED, sticky = STICKY, oninvoke = ONINVOKE, onthrow = ONTHROW, onreturn = ONRETURN, cache = CACHE, validation = VALIDATION,
+ arguments = {@Argument(index = ARGUMENTS_INDEX, callback = ARGUMENTS_CALLBACK, type = ARGUMENTS_TYPE)})})
+ private String testField;
+
+ @Test
+ public void testStaticConstructor() throws NoSuchFieldException {
+ Method[] methods = this.getClass().getDeclaredField("testField").getAnnotation(Reference.class).methods();
+ List<MethodConfig> methodConfigs = MethodConfig.constructMethodConfig(methods);
+ MethodConfig methodConfig = methodConfigs.get(0);
+
+ assertThat(METHOD_NAME, equalTo(methodConfig.getName()));
+ assertThat(TIMEOUT, equalTo(methodConfig.getTimeout().intValue()));
+ assertThat(RETRIES, equalTo(methodConfig.getRetries().intValue()));
+ assertThat(LOADBALANCE, equalTo(methodConfig.getLoadbalance()));
+ assertThat(ASYNC, equalTo(methodConfig.isAsync()));
+ assertThat(ACTIVES, equalTo(methodConfig.getActives().intValue()));
+ assertThat(EXECUTES, equalTo(methodConfig.getExecutes().intValue()));
+ assertThat(DEPERECATED, equalTo(methodConfig.getDeprecated()));
+ assertThat(STICKY, equalTo(methodConfig.getSticky()));
+ assertThat(ONINVOKE, equalTo(methodConfig.getOninvoke()));
+ assertThat(ONTHROW, equalTo(methodConfig.getOnthrow()));
+ assertThat(ONRETURN, equalTo(methodConfig.getOnreturn()));
+ assertThat(CACHE, equalTo(methodConfig.getCache()));
+ assertThat(VALIDATION, equalTo(methodConfig.getValidation()));
+ assertThat(ARGUMENTS_INDEX, equalTo(methodConfig.getArguments().get(0).getIndex().intValue()));
+ assertThat(ARGUMENTS_CALLBACK, equalTo(methodConfig.getArguments().get(0).isCallback()));
+ assertThat(ARGUMENTS_TYPE, equalTo(methodConfig.getArguments().get(0).getType()));
+ }
+
@Test
public void testName() throws Exception {
MethodConfig method = new MethodConfig();
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java
index 7c0c759..8a5cf10 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java
@@ -17,6 +17,9 @@
package org.apache.dubbo.config;
import org.apache.dubbo.common.Constants;
+import org.apache.dubbo.config.annotation.Argument;
+import org.apache.dubbo.config.annotation.Method;
+import org.apache.dubbo.config.annotation.Reference;
import org.apache.dubbo.config.api.DemoService;
import org.apache.dubbo.config.context.ConfigManager;
import org.apache.dubbo.config.provider.impl.DemoServiceImpl;
@@ -124,4 +127,32 @@ public class ReferenceConfigTest {
Assertions.assertNotNull(demoService);
}
+
+ @Test
+ public void testConstructWithReferenceAnnotation() throws NoSuchFieldException {
+ Reference reference = getClass().getDeclaredField("innerTest").getAnnotation(Reference.class);
+ ReferenceConfig referenceConfig = new ReferenceConfig(reference);
+ Assertions.assertTrue(referenceConfig.getMethods().size() == 1);
+ Assertions.assertEquals(((MethodConfig) referenceConfig.getMethods().get(0)).getName(), "sayHello");
+ Assertions.assertTrue(((MethodConfig) referenceConfig.getMethods().get(0)).getTimeout() == 1300);
+ Assertions.assertTrue(((MethodConfig) referenceConfig.getMethods().get(0)).getRetries() == 4);
+ Assertions.assertEquals(((MethodConfig) referenceConfig.getMethods().get(0)).getLoadbalance(), "random");
+ Assertions.assertTrue(((MethodConfig) referenceConfig.getMethods().get(0)).getActives() == 3);
+ Assertions.assertTrue(((MethodConfig) referenceConfig.getMethods().get(0)).getExecutes() == 5);
+ Assertions.assertTrue(((MethodConfig) referenceConfig.getMethods().get(0)).isAsync());
+ Assertions.assertEquals(((MethodConfig) referenceConfig.getMethods().get(0)).getOninvoke(), "i");
+ Assertions.assertEquals(((MethodConfig) referenceConfig.getMethods().get(0)).getOnreturn(), "r");
+ Assertions.assertEquals(((MethodConfig) referenceConfig.getMethods().get(0)).getOnthrow(), "t");
+ Assertions.assertEquals(((MethodConfig) referenceConfig.getMethods().get(0)).getCache(), "c");
+ }
+
+
+ @Reference(methods = {@Method(name = "sayHello", timeout = 1300, retries = 4, loadbalance = "random", async = true,
+ actives = 3, executes = 5, deprecated = true, sticky = true, oninvoke = "i", onthrow = "t", onreturn = "r", cache = "c", validation = "v",
+ arguments = {@Argument(index = 24, callback = true, type = "sss")})})
+ private InnerTest innerTest;
+
+ private class InnerTest {
+
+ }
}
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/ReferenceBeanBuilder.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/ReferenceBeanBuilder.java
index aff3ed2..d4aef6a 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/ReferenceBeanBuilder.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/ReferenceBeanBuilder.java
@@ -18,6 +18,8 @@ package org.apache.dubbo.config.spring.beans.factory.annotation;
import org.apache.dubbo.common.utils.CollectionUtils;
import org.apache.dubbo.config.ConsumerConfig;
+import org.apache.dubbo.config.MethodConfig;
+import org.apache.dubbo.config.annotation.Method;
import org.apache.dubbo.config.annotation.Reference;
import org.apache.dubbo.config.spring.ReferenceBean;
@@ -29,6 +31,7 @@ import org.springframework.util.StringUtils;
import org.springframework.validation.DataBinder;
import java.beans.PropertyEditorSupport;
+import java.util.List;
import java.util.Map;
import static org.apache.dubbo.config.spring.util.BeanFactoryUtils.getOptionalBean;
@@ -89,6 +92,14 @@ class ReferenceBeanBuilder extends AbstractAnnotationConfigBeanBuilder<Reference
}
+ void configureMethodConfig(Reference reference, ReferenceBean<?> referenceBean){
+ Method[] methods = reference.methods();
+ List<MethodConfig> methodConfigs = MethodConfig.constructMethodConfig(methods);
+ if(!methodConfigs.isEmpty()){
+ referenceBean.setMethods(methodConfigs);
+ }
+ }
+
@Override
protected ReferenceBean doBuild() {
return new ReferenceBean<Object>();
@@ -154,6 +165,8 @@ class ReferenceBeanBuilder extends AbstractAnnotationConfigBeanBuilder<Reference
configureConsumerConfig(annotation, bean);
+ configureMethodConfig(annotation, bean);
+
bean.afterPropertiesSet();
}
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/ServiceAnnotationBeanPostProcessor.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/ServiceAnnotationBeanPostProcessor.java
index bc5339b..22fa704 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/ServiceAnnotationBeanPostProcessor.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/ServiceAnnotationBeanPostProcessor.java
@@ -18,6 +18,7 @@ package org.apache.dubbo.config.spring.beans.factory.annotation;
import org.apache.dubbo.common.logger.Logger;
import org.apache.dubbo.common.logger.LoggerFactory;
+import org.apache.dubbo.config.MethodConfig;
import org.apache.dubbo.config.annotation.Service;
import org.apache.dubbo.config.spring.ServiceBean;
import org.apache.dubbo.config.spring.context.annotation.DubboClassPathBeanDefinitionScanner;
@@ -434,6 +435,11 @@ public class ServiceAnnotationBeanPostProcessor implements BeanDefinitionRegistr
builder.addPropertyValue("protocols", protocolRuntimeBeanReferences);
}
+ List<MethodConfig> methodConfigs = MethodConfig.constructMethodConfig(service.methods());
+ if (!methodConfigs.isEmpty()) {
+ builder.addPropertyValue("methods", methodConfigs);
+ }
+
return builder.getBeanDefinition();
}
@@ -484,4 +490,4 @@ public class ServiceAnnotationBeanPostProcessor implements BeanDefinitionRegistr
this.classLoader = classLoader;
}
-}
\ No newline at end of file
+}
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/util/AnnotationUtils.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/util/AnnotationUtils.java
index ed2a607..9832e10 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/util/AnnotationUtils.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/util/AnnotationUtils.java
@@ -258,6 +258,17 @@ public class AnnotationUtils {
continue;
}
+ /**
+ * @since 2.7.1
+ * ignore annotation member
+ */
+ if (attributeValue.getClass().isAnnotation()){
+ continue;
+ }
+ if (attributeValue.getClass().isArray() && attributeValue.getClass().getComponentType().isAnnotation()){
+ continue;
+ }
+
if (attributeValue instanceof String) {
attributeValue = resolvePlaceholders(valueOf(attributeValue), propertyResolver);
} else if (attributeValue instanceof String[]) {
@@ -281,4 +292,4 @@ public class AnnotationUtils {
return resolvedValue;
}
-}
\ No newline at end of file
+}
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/annotation/consumer/AnnotationAction.java b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/annotation/consumer/AnnotationAction.java
index 35d94fe..1e71f01 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/annotation/consumer/AnnotationAction.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/annotation/consumer/AnnotationAction.java
@@ -16,6 +16,7 @@
*/
package org.apache.dubbo.config.spring.annotation.consumer;
+import org.apache.dubbo.config.annotation.Method;
import org.apache.dubbo.config.annotation.Reference;
import org.apache.dubbo.config.spring.api.DemoService;
@@ -27,11 +28,11 @@ import org.springframework.stereotype.Controller;
@Controller("annotationAction")
public class AnnotationAction {
- @Reference(version = "1.2")
+ @Reference(version = "1.2", methods = {@Method(name = "sayHello", timeout = 5000)})
private DemoService demoService;
public String doSayName(String name) {
return demoService.sayName(name);
}
-}
\ No newline at end of file
+}