From 2eff02d4e94c9b69d7b1f990255384c06a66c4db Mon Sep 17 00:00:00 2001 From: mercyblitz Date: Mon, 23 Apr 2018 21:24:55 +0800 Subject: [PATCH] Fix apache/incubator-dubbo#1653 --- .../ServiceAnnotationBeanPostProcessor.java | 31 ++++++++++++++++--- 1 file changed, 27 insertions(+), 4 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 af05aac1383..d3ca42ea34e 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 @@ -71,6 +71,8 @@ public class ServiceAnnotationBeanPostProcessor implements BeanDefinitionRegistryPostProcessor, EnvironmentAware, ResourceLoaderAware, BeanClassLoaderAware { + private static final String SEPARATOR = ":"; + private final Logger logger = LoggerFactory.getLogger(getClass()); private final Set packagesToScan; @@ -254,7 +256,7 @@ private void registerServiceBean(BeanDefinitionHolder beanDefinitionHolder, Bean buildServiceBeanDefinition(service, interfaceClass, annotatedServiceBeanName); // ServiceBean Bean name - String beanName = generateServiceBeanName(interfaceClass, annotatedServiceBeanName); + String beanName = generateServiceBeanName(service, interfaceClass, annotatedServiceBeanName); if (scanner.checkCandidate(beanName, serviceBeanDefinition)) { // check duplicated candidate bean registry.registerBeanDefinition(beanName, serviceBeanDefinition); @@ -279,14 +281,35 @@ private void registerServiceBean(BeanDefinitionHolder beanDefinitionHolder, Bean /** * Generates the bean name of {@link ServiceBean} * + * @param service * @param interfaceClass the class of interface annotated {@link Service} * @param annotatedServiceBeanName the bean name of annotated {@link Service} * @return ServiceBean@interfaceClassName#annotatedServiceBeanName * @since 2.5.9 */ - private String generateServiceBeanName(Class interfaceClass, String annotatedServiceBeanName) { + private String generateServiceBeanName(Service service, Class interfaceClass, String annotatedServiceBeanName) { + + StringBuilder beanNameBuilder = new StringBuilder(ServiceBean.class.getSimpleName()); + + beanNameBuilder.append(SEPARATOR).append(annotatedServiceBeanName); + + String interfaceClassName = interfaceClass.getName(); + + beanNameBuilder.append(SEPARATOR).append(interfaceClassName); + + String version = service.version(); - return "ServiceBean@" + interfaceClass.getName() + "#" + annotatedServiceBeanName; + if (StringUtils.hasText(version)) { + beanNameBuilder.append(SEPARATOR).append(version); + } + + String group = service.group(); + + if (StringUtils.hasText(group)) { + beanNameBuilder.append(SEPARATOR).append(group); + } + + return beanNameBuilder.toString(); } @@ -423,7 +446,7 @@ private AbstractBeanDefinition buildServiceBeanDefinition(Service service, Class List protocolRuntimeBeanReferences = toRuntimeBeanReferences(protocolConfigBeanNames); - if (!registryRuntimeBeanReferences.isEmpty()) { + if (!protocolRuntimeBeanReferences.isEmpty()) { builder.addPropertyValue("protocols", protocolRuntimeBeanReferences); }