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