You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by vi...@apache.org on 2019/07/31 03:08:08 UTC
[dubbo] branch master updated: Fixed Service annotation method
parameters are not in effect (#4598)
This is an automated email from the ASF dual-hosted git repository.
victory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/master by this push:
new c3132b8 Fixed Service annotation method parameters are not in effect (#4598)
c3132b8 is described below
commit c3132b8343de5ba8ce289822a633c32de79c2799
Author: huaifeng <79...@qq.com>
AuthorDate: Wed Jul 31 11:07:55 2019 +0800
Fixed Service annotation method parameters are not in effect (#4598)
---
.../ServiceAnnotationBeanPostProcessor.java | 14 ++++
.../dubbo/config/spring/util/AnnotationUtils.java | 12 ---
.../ReferenceAnnotationBeanPostProcessorTest.java | 89 ++++++++++++----------
.../ServiceAnnotationBeanPostProcessorTest.java | 14 ++++
.../annotation/provider/DemoServiceImpl.java | 4 +-
.../demo/consumer/comp/DemoServiceComponent.java | 3 +-
.../resources/spring/dubbo-consumer.properties | 2 +-
.../apache/dubbo/demo/provider/Application.java | 2 +-
.../dubbo/demo/provider/DemoServiceImpl.java | 8 +-
9 files changed, 92 insertions(+), 56 deletions(-)
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 06deb57..c3e3dca 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
@@ -16,9 +16,12 @@
*/
package org.apache.dubbo.config.spring.beans.factory.annotation;
+import java.util.Collections;
import org.apache.dubbo.common.logger.Logger;
import org.apache.dubbo.common.logger.LoggerFactory;
import org.apache.dubbo.common.utils.ArrayUtils;
+import org.apache.dubbo.config.MethodConfig;
+import org.apache.dubbo.config.annotation.Method;
import org.apache.dubbo.config.annotation.Service;
import org.apache.dubbo.config.spring.ServiceBean;
import org.apache.dubbo.config.spring.context.annotation.DubboClassPathBeanDefinitionScanner;
@@ -387,6 +390,11 @@ public class ServiceAnnotationBeanPostProcessor implements BeanDefinitionRegistr
builder.addPropertyValue("interface", interfaceClass.getName());
// Convert parameters into map
builder.addPropertyValue("parameters", convertParameters(serviceAnnotationAttributes.getStringArray("parameters")));
+ // Add methods parameters
+ List<MethodConfig> methodConfigs = convertMethodConfigs(serviceAnnotationAttributes.get("methods"));
+ if (!methodConfigs.isEmpty()) {
+ builder.addPropertyValue("methods", methodConfigs);
+ }
/**
* Add {@link org.apache.dubbo.config.ProviderConfig} Bean reference
@@ -447,6 +455,12 @@ public class ServiceAnnotationBeanPostProcessor implements BeanDefinitionRegistr
}
+ private List convertMethodConfigs(Object methodsAnnotation) {
+ if (methodsAnnotation == null){
+ return Collections.EMPTY_LIST;
+ }
+ return MethodConfig.constructMethodConfig((Method[])methodsAnnotation);
+ }
private ManagedList<RuntimeBeanReference> toRuntimeBeanReferences(String... beanNames) {
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 19ced2b..ea13daf 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
@@ -343,21 +343,9 @@ public class AnnotationUtils {
if (ignoreDefaultValue && nullSafeEquals(attributeValue, getDefaultValue(annotation, attributeName))) {
continue;
}
-
- /**
- * @since 2.7.1
- * ignore annotation member
- */
- if (attributeValue.getClass().isAnnotation()) {
- continue;
- }
- if (attributeValue.getClass().isArray() && attributeValue.getClass().getComponentType().isAnnotation()) {
- continue;
- }
actualAttributes.put(attributeName, attributeValue);
}
-
return resolvePlaceholders(actualAttributes, propertyResolver, ignoreAttributeNames);
}
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/ReferenceAnnotationBeanPostProcessorTest.java b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/ReferenceAnnotationBeanPostProcessorTest.java
index 56fd297..d1a695f 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/ReferenceAnnotationBeanPostProcessorTest.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/ReferenceAnnotationBeanPostProcessorTest.java
@@ -16,6 +16,7 @@
*/
package org.apache.dubbo.config.spring.beans.factory.annotation;
+import org.apache.dubbo.config.annotation.Method;
import org.apache.dubbo.config.annotation.Reference;
import org.apache.dubbo.config.spring.ReferenceBean;
import org.apache.dubbo.config.spring.api.DemoService;
@@ -47,14 +48,14 @@ import static org.junit.Assert.assertTrue;
*/
@RunWith(SpringRunner.class)
@ContextConfiguration(
- classes = {
- ServiceAnnotationTestConfiguration.class,
- ReferenceAnnotationBeanPostProcessorTest.class
- })
+ classes = {
+ ServiceAnnotationTestConfiguration.class,
+ ReferenceAnnotationBeanPostProcessorTest.class
+ })
@TestPropertySource(properties = {
- "packagesToScan = org.apache.dubbo.config.spring.context.annotation.provider",
- "consumer.version = ${demo.service.version}",
- "consumer.url = dubbo://127.0.0.1:12345?version=2.5.7",
+ "packagesToScan = org.apache.dubbo.config.spring.context.annotation.provider",
+ "consumer.version = ${demo.service.version}",
+ "consumer.url = dubbo://127.0.0.1:12345?version=2.5.7",
})
public class ReferenceAnnotationBeanPostProcessorTest {
@@ -79,7 +80,7 @@ public class ReferenceAnnotationBeanPostProcessorTest {
@Qualifier("helloServiceImpl")
private HelloService helloServiceImpl;
- @Reference(id = "helloService")
+ @Reference(id = "helloService", methods = @Method(name = "sayName", timeout = 100))
private HelloService helloService;
@Test
@@ -131,7 +132,7 @@ public class ReferenceAnnotationBeanPostProcessorTest {
public void testGetReferenceBeans() {
ReferenceAnnotationBeanPostProcessor beanPostProcessor = context.getBean(BEAN_NAME,
- ReferenceAnnotationBeanPostProcessor.class);
+ ReferenceAnnotationBeanPostProcessor.class);
Collection<ReferenceBean<?>> referenceBeans = beanPostProcessor.getReferenceBeans();
@@ -139,8 +140,6 @@ public class ReferenceAnnotationBeanPostProcessorTest {
ReferenceBean<?> referenceBean = referenceBeans.iterator().next();
- TestBean testBean = context.getBean(TestBean.class);
-
Assert.assertNotNull(referenceBean.get());
}
@@ -149,11 +148,10 @@ public class ReferenceAnnotationBeanPostProcessorTest {
public void testGetInjectedFieldReferenceBeanMap() {
ReferenceAnnotationBeanPostProcessor beanPostProcessor = context.getBean(BEAN_NAME,
- ReferenceAnnotationBeanPostProcessor.class);
-
+ ReferenceAnnotationBeanPostProcessor.class);
Map<InjectionMetadata.InjectedElement, ReferenceBean<?>> referenceBeanMap =
- beanPostProcessor.getInjectedFieldReferenceBeanMap();
+ beanPostProcessor.getInjectedFieldReferenceBeanMap();
Assert.assertEquals(2, referenceBeanMap.size());
@@ -162,7 +160,7 @@ public class ReferenceAnnotationBeanPostProcessorTest {
InjectionMetadata.InjectedElement injectedElement = entry.getKey();
Assert.assertEquals("org.apache.dubbo.config.spring.beans.factory.annotation.AnnotationInjectedBeanPostProcessor$AnnotatedFieldElement",
- injectedElement.getClass().getName());
+ injectedElement.getClass().getName());
}
@@ -172,11 +170,10 @@ public class ReferenceAnnotationBeanPostProcessorTest {
public void testGetInjectedMethodReferenceBeanMap() {
ReferenceAnnotationBeanPostProcessor beanPostProcessor = context.getBean(BEAN_NAME,
- ReferenceAnnotationBeanPostProcessor.class);
-
+ ReferenceAnnotationBeanPostProcessor.class);
Map<InjectionMetadata.InjectedElement, ReferenceBean<?>> referenceBeanMap =
- beanPostProcessor.getInjectedMethodReferenceBeanMap();
+ beanPostProcessor.getInjectedMethodReferenceBeanMap();
Assert.assertEquals(2, referenceBeanMap.size());
@@ -185,33 +182,32 @@ public class ReferenceAnnotationBeanPostProcessorTest {
InjectionMetadata.InjectedElement injectedElement = entry.getKey();
Assert.assertEquals("org.apache.dubbo.config.spring.beans.factory.annotation.AnnotationInjectedBeanPostProcessor$AnnotatedMethodElement",
- injectedElement.getClass().getName());
+ injectedElement.getClass().getName());
}
}
-// @Test
-// public void testModuleInfo() {
-//
-// ReferenceAnnotationBeanPostProcessor beanPostProcessor = context.getBean(BEAN_NAME,
-// ReferenceAnnotationBeanPostProcessor.class);
-//
-//
-// Map<InjectionMetadata.InjectedElement, ReferenceBean<?>> referenceBeanMap =
-// beanPostProcessor.getInjectedMethodReferenceBeanMap();
-//
-// for (Map.Entry<InjectionMetadata.InjectedElement, ReferenceBean<?>> entry : referenceBeanMap.entrySet()) {
-// ReferenceBean<?> referenceBean = entry.getValue();
-//
-// assertThat(referenceBean.getModule().getName(), is("defaultModule"));
-// assertThat(referenceBean.getMonitor(), not(nullValue()));
-// }
-// }
+ // @Test
+ // public void testModuleInfo() {
+ //
+ // ReferenceAnnotationBeanPostProcessor beanPostProcessor = context.getBean(BEAN_NAME,
+ // ReferenceAnnotationBeanPostProcessor.class);
+ //
+ //
+ // Map<InjectionMetadata.InjectedElement, ReferenceBean<?>> referenceBeanMap =
+ // beanPostProcessor.getInjectedMethodReferenceBeanMap();
+ //
+ // for (Map.Entry<InjectionMetadata.InjectedElement, ReferenceBean<?>> entry : referenceBeanMap.entrySet()) {
+ // ReferenceBean<?> referenceBean = entry.getValue();
+ //
+ // assertThat(referenceBean.getModule().getName(), is("defaultModule"));
+ // assertThat(referenceBean.getMonitor(), not(nullValue()));
+ // }
+ // }
private static class AncestorBean {
-
private DemoService demoServiceFromAncestor;
@Autowired
@@ -232,7 +228,6 @@ public class ReferenceAnnotationBeanPostProcessorTest {
}
-
private static class ParentBean extends AncestorBean {
@Reference(version = "${consumer.version}", url = "${consumer.url}")
@@ -242,7 +237,6 @@ public class ReferenceAnnotationBeanPostProcessorTest {
return demoServiceFromParent;
}
-
}
static class TestBean extends ParentBean {
@@ -265,4 +259,21 @@ public class ReferenceAnnotationBeanPostProcessorTest {
}
}
+ @Test
+ public void testReferenceBeansMethodAnnotation() {
+
+ ReferenceAnnotationBeanPostProcessor beanPostProcessor = context.getBean(BEAN_NAME,
+ ReferenceAnnotationBeanPostProcessor.class);
+
+ Collection<ReferenceBean<?>> referenceBeans = beanPostProcessor.getReferenceBeans();
+
+ Assert.assertEquals(2, referenceBeans.size());
+
+ ReferenceBean<?> referenceBean = referenceBeans.iterator().next();
+
+ if ("helloService".equals(referenceBean.getId())) {
+ Assert.assertNotNull(referenceBean.getMethods());
+ }
+ }
+
}
\ No newline at end of file
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/ServiceAnnotationBeanPostProcessorTest.java b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/ServiceAnnotationBeanPostProcessorTest.java
index 22325d9..17d3023 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/ServiceAnnotationBeanPostProcessorTest.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/ServiceAnnotationBeanPostProcessorTest.java
@@ -17,6 +17,7 @@
package org.apache.dubbo.config.spring.beans.factory.annotation;
import org.apache.dubbo.config.spring.ServiceBean;
+import org.apache.dubbo.config.spring.api.DemoService;
import org.apache.dubbo.config.spring.api.HelloService;
import org.junit.Assert;
@@ -79,4 +80,17 @@ public class ServiceAnnotationBeanPostProcessorTest {
}
+ @Test
+ public void testMethodAnnotation() {
+
+ Map<String, ServiceBean> serviceBeansMap = beanFactory.getBeansOfType(ServiceBean.class);
+
+ Assert.assertEquals(2, serviceBeansMap.size());
+
+ ServiceBean demoServiceBean = serviceBeansMap.get("ServiceBean:org.apache.dubbo.config.spring.api.DemoService:2.5.7");
+
+ Assert.assertNotNull(demoServiceBean.getMethods());
+
+ }
+
}
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/context/annotation/provider/DemoServiceImpl.java b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/context/annotation/provider/DemoServiceImpl.java
index 3aa1e86..8ee2a8a 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/context/annotation/provider/DemoServiceImpl.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/context/annotation/provider/DemoServiceImpl.java
@@ -16,6 +16,7 @@
*/
package org.apache.dubbo.config.spring.context.annotation.provider;
+import org.apache.dubbo.config.annotation.Method;
import org.apache.dubbo.config.spring.api.Box;
import org.apache.dubbo.config.spring.api.DemoService;
@@ -32,7 +33,8 @@ import org.springframework.transaction.annotation.Transactional;
version = "2.5.7",
application = "${demo.service.application}",
protocol = "${demo.service.protocol}",
- registry = "${demo.service.registry}"
+ registry = "${demo.service.registry}",
+ methods = @Method(timeout = 100,name = "sayName")
)
@Service
@Transactional
diff --git a/dubbo-demo/dubbo-demo-annotation/dubbo-demo-annotation-consumer/src/main/java/org/apache/dubbo/demo/consumer/comp/DemoServiceComponent.java b/dubbo-demo/dubbo-demo-annotation/dubbo-demo-annotation-consumer/src/main/java/org/apache/dubbo/demo/consumer/comp/DemoServiceComponent.java
index 4305ed6..757994d 100644
--- a/dubbo-demo/dubbo-demo-annotation/dubbo-demo-annotation-consumer/src/main/java/org/apache/dubbo/demo/consumer/comp/DemoServiceComponent.java
+++ b/dubbo-demo/dubbo-demo-annotation/dubbo-demo-annotation-consumer/src/main/java/org/apache/dubbo/demo/consumer/comp/DemoServiceComponent.java
@@ -19,6 +19,7 @@
package org.apache.dubbo.demo.consumer.comp;
+import org.apache.dubbo.config.annotation.Method;
import org.apache.dubbo.config.annotation.Reference;
import org.apache.dubbo.demo.DemoService;
@@ -26,7 +27,7 @@ import org.springframework.stereotype.Component;
@Component("demoServiceComponent")
public class DemoServiceComponent implements DemoService {
- @Reference
+ @Reference(timeout = 100,methods = @Method(timeout = 500,name = "sayHello"))
private DemoService demoService;
@Override
diff --git a/dubbo-demo/dubbo-demo-annotation/dubbo-demo-annotation-consumer/src/main/resources/spring/dubbo-consumer.properties b/dubbo-demo/dubbo-demo-annotation/dubbo-demo-annotation-consumer/src/main/resources/spring/dubbo-consumer.properties
index 5ec658b..bda13ad 100644
--- a/dubbo-demo/dubbo-demo-annotation/dubbo-demo-annotation-consumer/src/main/resources/spring/dubbo-consumer.properties
+++ b/dubbo-demo/dubbo-demo-annotation/dubbo-demo-annotation-consumer/src/main/resources/spring/dubbo-consumer.properties
@@ -18,4 +18,4 @@
#
dubbo.application.name=dubbo-demo-annotation-consumer
-dubbo.registry.address=multicast://224.5.6.7:1234
+dubbo.registry.address=zookeeper://127.0.0.1:2181
diff --git a/dubbo-demo/dubbo-demo-annotation/dubbo-demo-annotation-provider/src/main/java/org/apache/dubbo/demo/provider/Application.java b/dubbo-demo/dubbo-demo-annotation/dubbo-demo-annotation-provider/src/main/java/org/apache/dubbo/demo/provider/Application.java
index b848865..9190d08 100644
--- a/dubbo-demo/dubbo-demo-annotation/dubbo-demo-annotation-provider/src/main/java/org/apache/dubbo/demo/provider/Application.java
+++ b/dubbo-demo/dubbo-demo-annotation/dubbo-demo-annotation-provider/src/main/java/org/apache/dubbo/demo/provider/Application.java
@@ -44,7 +44,7 @@ public class Application {
@Bean
public RegistryConfig registryConfig() {
RegistryConfig registryConfig = new RegistryConfig();
- registryConfig.setAddress("multicast://224.5.6.7:1234");
+ registryConfig.setAddress("zookeeper://127.0.0.1:2181");
return registryConfig;
}
}
diff --git a/dubbo-demo/dubbo-demo-annotation/dubbo-demo-annotation-provider/src/main/java/org/apache/dubbo/demo/provider/DemoServiceImpl.java b/dubbo-demo/dubbo-demo-annotation/dubbo-demo-annotation-provider/src/main/java/org/apache/dubbo/demo/provider/DemoServiceImpl.java
index cb06537..96971db 100644
--- a/dubbo-demo/dubbo-demo-annotation/dubbo-demo-annotation-provider/src/main/java/org/apache/dubbo/demo/provider/DemoServiceImpl.java
+++ b/dubbo-demo/dubbo-demo-annotation/dubbo-demo-annotation-provider/src/main/java/org/apache/dubbo/demo/provider/DemoServiceImpl.java
@@ -18,6 +18,7 @@
*/
package org.apache.dubbo.demo.provider;
+import org.apache.dubbo.config.annotation.Method;
import org.apache.dubbo.config.annotation.Service;
import org.apache.dubbo.demo.DemoService;
import org.apache.dubbo.rpc.RpcContext;
@@ -25,12 +26,17 @@ import org.apache.dubbo.rpc.RpcContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-@Service
+@Service(timeout = 100,methods = @Method(timeout = 1000,name = "sayHello"))
public class DemoServiceImpl implements DemoService {
private static final Logger logger = LoggerFactory.getLogger(DemoServiceImpl.class);
@Override
public String sayHello(String name) {
+ try {
+ Thread.sleep(2000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
logger.info("Hello " + name + ", request from consumer: " + RpcContext.getContext().getRemoteAddress());
return "Hello " + name + ", response from provider: " + RpcContext.getContext().getLocalAddress();
}