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 2021/06/08 15:32:50 UTC
[dubbo] branch 2.6.x updated: Service annotation #parameters on
issue#3072 (#8002)
This is an automated email from the ASF dual-hosted git repository.
liujun pushed a commit to branch 2.6.x
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/2.6.x by this push:
new fc1bdfa Service annotation #parameters on issue#3072 (#8002)
fc1bdfa is described below
commit fc1bdfa945411878c1828219e9021786c4128fbe
Author: Xiong, Pin <pi...@foxmail.com>
AuthorDate: Tue Jun 8 10:32:09 2021 -0500
Service annotation #parameters on issue#3072 (#8002)
fixes #3072
---
.../ServiceAnnotationBeanPostProcessor.java | 26 +++++++++++++++++++++-
.../ServiceAnnotationBeanPostProcessorTest.java | 17 ++++++++++++++
.../annotation/provider/DefaultHelloService.java | 2 +-
3 files changed, 43 insertions(+), 2 deletions(-)
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/ServiceAnnotationBeanPostProcessor.java b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/ServiceAnnotationBeanPostProcessor.java
index 5e96116..e04e496 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/ServiceAnnotationBeanPostProcessor.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/ServiceAnnotationBeanPostProcessor.java
@@ -57,6 +57,8 @@ import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
+import java.util.Map;
+import java.util.HashMap;
import static com.alibaba.dubbo.config.spring.util.ObjectUtils.of;
import static org.springframework.beans.factory.support.BeanDefinitionBuilder.rootBeanDefinition;
@@ -370,7 +372,7 @@ public class ServiceAnnotationBeanPostProcessor implements BeanDefinitionRegistr
MutablePropertyValues propertyValues = beanDefinition.getPropertyValues();
String[] ignoreAttributeNames = of("provider", "monitor", "application", "module", "registry", "protocol",
- "interface", "interfaceName");
+ "interface", "interfaceName", "parameters");
propertyValues.addPropertyValues(new AnnotationPropertyValuesAdapter(service, environment, ignoreAttributeNames));
@@ -378,6 +380,8 @@ public class ServiceAnnotationBeanPostProcessor implements BeanDefinitionRegistr
addPropertyReference(builder, "ref", annotatedServiceBeanName);
// Set interface
builder.addPropertyValue("interface", interfaceClass.getName());
+ // Set parameters
+ builder.addPropertyValue("parameters",convertParameters(service.parameters()));
/**
* Add {@link com.alibaba.dubbo.config.ProviderConfig} Bean reference
@@ -469,6 +473,26 @@ public class ServiceAnnotationBeanPostProcessor implements BeanDefinitionRegistr
builder.addPropertyReference(propertyName, resolvedBeanName);
}
+ /**
+ * Converts the string array parameters to map.
+ * @param parameters the parameters to convert.
+ * @return the converted parameters as a map.
+ */
+ private Map<String, String> convertParameters(String[] parameters) {
+ if (parameters == null || parameters.length == 0) {
+ return null;
+ }
+
+ if (parameters.length % 2 != 0) {
+ throw new IllegalArgumentException("parameter attribute must be paired with key followed by value");
+ }
+
+ Map<String, String> map = new HashMap<String,String>();
+ for (int i = 0; i < parameters.length; i += 2) {
+ map.put(parameters[i], parameters[i + 1]);
+ }
+ return map;
+ }
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/ServiceAnnotationBeanPostProcessorTest.java b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/ServiceAnnotationBeanPostProcessorTest.java
index 22b1f56..528ebfd 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/ServiceAnnotationBeanPostProcessorTest.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/ServiceAnnotationBeanPostProcessorTest.java
@@ -16,6 +16,7 @@
*/
package com.alibaba.dubbo.config.spring.beans.factory.annotation;
+import com.alibaba.dubbo.config.annotation.Service;
import com.alibaba.dubbo.config.spring.ServiceBean;
import com.alibaba.dubbo.config.spring.api.HelloService;
@@ -79,4 +80,20 @@ public class ServiceAnnotationBeanPostProcessorTest {
}
+ /**
+ * Test if the {@link Service#parameters()} works well
+ * see issue: https://github.com/apache/dubbo/issues/3072
+ */
+ @Test
+ public void testDubboServiceParameter() {
+ /**
+ * get the {@link ServiceBean} of {@link com.alibaba.dubbo.config.spring.context.annotation.provider.DefaultHelloService}
+ * */
+ ServiceBean serviceBean = beanFactory.getBean("ServiceBean:com.alibaba.dubbo.config.spring.api.HelloService", ServiceBean.class);
+ Assert.assertNotNull(serviceBean);
+ Assert.assertNotNull(serviceBean.getParameters());
+ Assert.assertTrue(serviceBean.getParameters().size() == 1);
+ Assert.assertEquals(serviceBean.toUrl().getParameter("sayHello.timeout"), "3000");
+ }
+
}
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/provider/DefaultHelloService.java b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/provider/DefaultHelloService.java
index 5b5f894..b23b9f9 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/provider/DefaultHelloService.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/provider/DefaultHelloService.java
@@ -27,7 +27,7 @@ import org.springframework.stereotype.Service;
* @since TODO
*/
@Service
-@com.alibaba.dubbo.config.annotation.Service
+@com.alibaba.dubbo.config.annotation.Service(parameters = {"sayHello.timeout", "3000"})
public class DefaultHelloService implements HelloService {
@Override