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/06/26 07:19:49 UTC
[dubbo] branch 2.7.3-release updated: Spring package scan
compatibility, support both alibaba Service and apache Service. (#4375)
This is an automated email from the ASF dual-hosted git repository.
liujun pushed a commit to branch 2.7.3-release
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/2.7.3-release by this push:
new acae8d9 Spring package scan compatibility, support both alibaba Service and apache Service. (#4375)
acae8d9 is described below
commit acae8d99e0301520cade337ddb5782d994c9a5d0
Author: Mercy Ma <me...@gmail.com>
AuthorDate: Wed Jun 26 15:19:18 2019 +0800
Spring package scan compatibility, support both alibaba Service and apache Service. (#4375)
fixes #4330
---
.../alibaba/dubbo/config/annotation/Reference.java | 0
.../alibaba/dubbo/config/annotation/Service.java | 0
dubbo-config/dubbo-config-spring/pom.xml | 1 +
.../ServiceAnnotationBeanPostProcessor.java | 124 +++++++++++----------
.../factory/annotation/ServiceBeanNameBuilder.java | 42 ++++---
.../dubbo/config/spring/util/AnnotationUtils.java | 94 +++++++++++++++-
.../annotation/provider/HelloServiceImpl.java | 3 +-
.../annotation/provider/ProviderConfiguration.java | 4 +-
dubbo-dependencies-bom/pom.xml | 2 +-
.../dubbo/registry/nacos/NacosRegistryFactory.java | 2 +-
10 files changed, 188 insertions(+), 84 deletions(-)
diff --git a/dubbo-compatible/src/main/java/com/alibaba/dubbo/config/annotation/Reference.java b/dubbo-config/dubbo-config-api/src/main/java/com/alibaba/dubbo/config/annotation/Reference.java
similarity index 100%
rename from dubbo-compatible/src/main/java/com/alibaba/dubbo/config/annotation/Reference.java
rename to dubbo-config/dubbo-config-api/src/main/java/com/alibaba/dubbo/config/annotation/Reference.java
diff --git a/dubbo-compatible/src/main/java/com/alibaba/dubbo/config/annotation/Service.java b/dubbo-config/dubbo-config-api/src/main/java/com/alibaba/dubbo/config/annotation/Service.java
similarity index 100%
rename from dubbo-compatible/src/main/java/com/alibaba/dubbo/config/annotation/Service.java
rename to dubbo-config/dubbo-config-api/src/main/java/com/alibaba/dubbo/config/annotation/Service.java
diff --git a/dubbo-config/dubbo-config-spring/pom.xml b/dubbo-config/dubbo-config-spring/pom.xml
index 04a8223..405b29e 100644
--- a/dubbo-config/dubbo-config-spring/pom.xml
+++ b/dubbo-config/dubbo-config-spring/pom.xml
@@ -128,5 +128,6 @@
<artifactId>tomcat-embed-core</artifactId>
<scope>test</scope>
</dependency>
+
</dependencies>
</project>
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 2dec2d3..0edc5f3 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
@@ -43,15 +43,15 @@ import org.springframework.context.annotation.AnnotationBeanNameGenerator;
import org.springframework.context.annotation.AnnotationConfigUtils;
import org.springframework.context.annotation.ClassPathBeanDefinitionScanner;
import org.springframework.context.annotation.ConfigurationClassPostProcessor;
+import org.springframework.core.annotation.AnnotationAttributes;
import org.springframework.core.env.Environment;
import org.springframework.core.io.ResourceLoader;
import org.springframework.core.type.filter.AnnotationTypeFilter;
-import org.springframework.util.Assert;
-import org.springframework.util.ClassUtils;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
+import java.lang.annotation.Annotation;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
@@ -61,10 +61,12 @@ import java.util.Map;
import java.util.Set;
import static org.apache.dubbo.config.spring.beans.factory.annotation.ServiceBeanNameBuilder.create;
+import static org.apache.dubbo.config.spring.util.AnnotationUtils.resolveServiceInterfaceClass;
import static org.apache.dubbo.config.spring.util.ObjectUtils.of;
import static org.springframework.beans.factory.support.BeanDefinitionBuilder.rootBeanDefinition;
import static org.springframework.context.annotation.AnnotationConfigUtils.CONFIGURATION_BEAN_NAME_GENERATOR;
import static org.springframework.core.annotation.AnnotationUtils.findAnnotation;
+import static org.springframework.core.annotation.AnnotationUtils.getAnnotationAttributes;
import static org.springframework.util.ClassUtils.resolveClassName;
/**
@@ -132,6 +134,14 @@ public class ServiceAnnotationBeanPostProcessor implements BeanDefinitionRegistr
scanner.addIncludeFilter(new AnnotationTypeFilter(Service.class));
+ /**
+ * Add the compatibility for legacy Dubbo's @Service
+ *
+ * The issue : https://github.com/apache/dubbo/issues/4330
+ * @since 2.7.3
+ */
+ scanner.addIncludeFilter(new AnnotationTypeFilter(com.alibaba.dubbo.config.annotation.Service.class));
+
for (String packageToScan : packagesToScan) {
// Registers @Service Bean first
@@ -250,17 +260,22 @@ public class ServiceAnnotationBeanPostProcessor implements BeanDefinitionRegistr
Class<?> beanClass = resolveClass(beanDefinitionHolder);
- Service service = findAnnotation(beanClass, Service.class);
+ Annotation service = findServiceAnnotation(beanClass);
- Class<?> interfaceClass = resolveServiceInterfaceClass(beanClass, service);
+ /**
+ * The {@link AnnotationAttributes} of @Service annotation
+ */
+ AnnotationAttributes serviceAnnotationAttributes = getAnnotationAttributes(service, false, false);
+
+ Class<?> interfaceClass = resolveServiceInterfaceClass(serviceAnnotationAttributes, beanClass);
String annotatedServiceBeanName = beanDefinitionHolder.getBeanName();
AbstractBeanDefinition serviceBeanDefinition =
- buildServiceBeanDefinition(service, interfaceClass, annotatedServiceBeanName);
+ buildServiceBeanDefinition(service, serviceAnnotationAttributes, interfaceClass, annotatedServiceBeanName);
// ServiceBean Bean name
- String beanName = generateServiceBeanName(service, interfaceClass);
+ String beanName = generateServiceBeanName(serviceAnnotationAttributes, interfaceClass);
if (scanner.checkCandidate(beanName, serviceBeanDefinition)) { // check duplicated candidate bean
registry.registerBeanDefinition(beanName, serviceBeanDefinition);
@@ -282,58 +297,37 @@ public class ServiceAnnotationBeanPostProcessor implements BeanDefinitionRegistr
}
+
+ /**
+ * Find the {@link Annotation annotation} of @Service
+ *
+ * @param beanClass the {@link Class class} of Bean
+ * @return <code>null</code> if not found
+ * @since 2.7.3
+ */
+ private Annotation findServiceAnnotation(Class<?> beanClass) {
+ Annotation service = findAnnotation(beanClass, Service.class);
+ if (service == null) {
+ service = findAnnotation(beanClass, com.alibaba.dubbo.config.annotation.Service.class);
+ }
+ return service;
+ }
+
/**
* Generates the bean name of {@link ServiceBean}
*
- * @param service
- * @param interfaceClass the class of interface annotated {@link Service}
+ * @param serviceAnnotationAttributes
+ * @param interfaceClass the class of interface annotated {@link Service}
* @return ServiceBean@interfaceClassName#annotatedServiceBeanName
- * @since 2.5.9
+ * @since 2.7.3
*/
- private String generateServiceBeanName(Service service, Class<?> interfaceClass) {
- ServiceBeanNameBuilder builder = create(service, interfaceClass, environment);
-
+ private String generateServiceBeanName(AnnotationAttributes serviceAnnotationAttributes, Class<?> interfaceClass) {
+ ServiceBeanNameBuilder builder = create(interfaceClass, environment)
+ .group(serviceAnnotationAttributes.getString("group"))
+ .version(serviceAnnotationAttributes.getString("version"));
return builder.build();
}
- private Class<?> resolveServiceInterfaceClass(Class<?> annotatedServiceBeanClass, Service service) {
-
- Class<?> interfaceClass = service.interfaceClass();
-
- if (void.class.equals(interfaceClass)) {
-
- interfaceClass = null;
-
- String interfaceClassName = service.interfaceName();
-
- if (StringUtils.hasText(interfaceClassName)) {
- if (ClassUtils.isPresent(interfaceClassName, classLoader)) {
- interfaceClass = resolveClassName(interfaceClassName, classLoader);
- }
- }
-
- }
-
- if (interfaceClass == null) {
- // Find all interfaces from the annotated class
- // To resolve an issue : https://github.com/apache/dubbo/issues/3251
- Class<?>[] allInterfaces = ClassUtils.getAllInterfacesForClass(annotatedServiceBeanClass);
-
- if (allInterfaces.length > 0) {
- interfaceClass = allInterfaces[0];
- }
-
- }
-
- Assert.notNull(interfaceClass,
- "@Service interfaceClass() or interfaceName() or interface class must be present!");
-
- Assert.isTrue(interfaceClass.isInterface(),
- "The type that was annotated @Service is not an interface!");
-
- return interfaceClass;
- }
-
private Class<?> resolveClass(BeanDefinitionHolder beanDefinitionHolder) {
BeanDefinition beanDefinition = beanDefinitionHolder.getBeanDefinition();
@@ -361,7 +355,19 @@ public class ServiceAnnotationBeanPostProcessor implements BeanDefinitionRegistr
return resolvedPackagesToScan;
}
- private AbstractBeanDefinition buildServiceBeanDefinition(Service service, Class<?> interfaceClass,
+ /**
+ * Build the {@link AbstractBeanDefinition Bean Definition}
+ *
+ * @param serviceAnnotation
+ * @param serviceAnnotationAttributes
+ * @param interfaceClass
+ * @param annotatedServiceBeanName
+ * @return
+ * @since 2.7.3
+ */
+ private AbstractBeanDefinition buildServiceBeanDefinition(Annotation serviceAnnotation,
+ AnnotationAttributes serviceAnnotationAttributes,
+ Class<?> interfaceClass,
String annotatedServiceBeanName) {
BeanDefinitionBuilder builder = rootBeanDefinition(ServiceBean.class);
@@ -373,19 +379,19 @@ public class ServiceAnnotationBeanPostProcessor implements BeanDefinitionRegistr
String[] ignoreAttributeNames = of("provider", "monitor", "application", "module", "registry", "protocol",
"interface", "interfaceName", "parameters");
- propertyValues.addPropertyValues(new AnnotationPropertyValuesAdapter(service, environment, ignoreAttributeNames));
+ propertyValues.addPropertyValues(new AnnotationPropertyValuesAdapter(serviceAnnotation, environment, ignoreAttributeNames));
// References "ref" property to annotated-@Service Bean
addPropertyReference(builder, "ref", annotatedServiceBeanName);
// Set interface
builder.addPropertyValue("interface", interfaceClass.getName());
// Convert parameters into map
- builder.addPropertyValue("parameters", convertParameters(service.parameters()));
+ builder.addPropertyValue("parameters", convertParameters(serviceAnnotationAttributes.getStringArray("parameters")));
/**
* Add {@link org.apache.dubbo.config.ProviderConfig} Bean reference
*/
- String providerConfigBeanName = service.provider();
+ String providerConfigBeanName = serviceAnnotationAttributes.getString("provider");
if (StringUtils.hasText(providerConfigBeanName)) {
addPropertyReference(builder, "provider", providerConfigBeanName);
}
@@ -393,7 +399,7 @@ public class ServiceAnnotationBeanPostProcessor implements BeanDefinitionRegistr
/**
* Add {@link org.apache.dubbo.config.MonitorConfig} Bean reference
*/
- String monitorConfigBeanName = service.monitor();
+ String monitorConfigBeanName = serviceAnnotationAttributes.getString("monitor");
if (StringUtils.hasText(monitorConfigBeanName)) {
addPropertyReference(builder, "monitor", monitorConfigBeanName);
}
@@ -401,7 +407,7 @@ public class ServiceAnnotationBeanPostProcessor implements BeanDefinitionRegistr
/**
* Add {@link org.apache.dubbo.config.ApplicationConfig} Bean reference
*/
- String applicationConfigBeanName = service.application();
+ String applicationConfigBeanName = serviceAnnotationAttributes.getString("application");
if (StringUtils.hasText(applicationConfigBeanName)) {
addPropertyReference(builder, "application", applicationConfigBeanName);
}
@@ -409,7 +415,7 @@ public class ServiceAnnotationBeanPostProcessor implements BeanDefinitionRegistr
/**
* Add {@link org.apache.dubbo.config.ModuleConfig} Bean reference
*/
- String moduleConfigBeanName = service.module();
+ String moduleConfigBeanName = serviceAnnotationAttributes.getString("module");
if (StringUtils.hasText(moduleConfigBeanName)) {
addPropertyReference(builder, "module", moduleConfigBeanName);
}
@@ -418,7 +424,7 @@ public class ServiceAnnotationBeanPostProcessor implements BeanDefinitionRegistr
/**
* Add {@link org.apache.dubbo.config.RegistryConfig} Bean reference
*/
- String[] registryConfigBeanNames = service.registry();
+ String[] registryConfigBeanNames = serviceAnnotationAttributes.getStringArray("registry");
List<RuntimeBeanReference> registryRuntimeBeanReferences = toRuntimeBeanReferences(registryConfigBeanNames);
@@ -429,7 +435,7 @@ public class ServiceAnnotationBeanPostProcessor implements BeanDefinitionRegistr
/**
* Add {@link org.apache.dubbo.config.ProtocolConfig} Bean reference
*/
- String[] protocolConfigBeanNames = service.protocol();
+ String[] protocolConfigBeanNames = serviceAnnotationAttributes.getStringArray("protocol");
List<RuntimeBeanReference> protocolRuntimeBeanReferences = toRuntimeBeanReferences(protocolConfigBeanNames);
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/ServiceBeanNameBuilder.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/ServiceBeanNameBuilder.java
index 5d27251..390e0b6 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/ServiceBeanNameBuilder.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/ServiceBeanNameBuilder.java
@@ -21,10 +21,12 @@ import org.apache.dubbo.config.annotation.Service;
import org.apache.dubbo.config.spring.ReferenceBean;
import org.apache.dubbo.config.spring.ServiceBean;
+import org.springframework.core.annotation.AnnotationAttributes;
import org.springframework.core.env.Environment;
import org.springframework.util.StringUtils;
import static org.apache.dubbo.config.spring.util.AnnotationUtils.resolveInterfaceName;
+import static org.springframework.core.annotation.AnnotationUtils.getAnnotationAttributes;
/**
* Dubbo {@link Service @Service} Bean Builder
@@ -39,6 +41,7 @@ public class ServiceBeanNameBuilder {
private static final String SEPARATOR = ":";
+ // Required
private final String interfaceClassName;
private final Environment environment;
@@ -48,25 +51,30 @@ public class ServiceBeanNameBuilder {
private String group;
+ private ServiceBeanNameBuilder(Class<?> interfaceClass, Environment environment) {
+ this(interfaceClass.getName(), environment);
+ }
+
private ServiceBeanNameBuilder(String interfaceClassName, Environment environment) {
this.interfaceClassName = interfaceClassName;
this.environment = environment;
}
- private ServiceBeanNameBuilder(Class<?> interfaceClass, Environment environment) {
- this(interfaceClass.getName(), environment);
- }
-
- private ServiceBeanNameBuilder(Service service, Class<?> interfaceClass, Environment environment) {
- this(resolveInterfaceName(service, interfaceClass), environment);
- this.group(service.group());
- this.version(service.version());
+ private ServiceBeanNameBuilder(AnnotationAttributes attributes, Class<?> defaultInterfaceClass, Environment environment) {
+ this(resolveInterfaceName(attributes, defaultInterfaceClass), environment);
+ this.group(attributes.getString("group"));
+ this.version(attributes.getString("version"));
}
- private ServiceBeanNameBuilder(Reference reference, Class<?> interfaceClass, Environment environment) {
- this(resolveInterfaceName(reference, interfaceClass), environment);
- this.group(reference.group());
- this.version(reference.version());
+ /**
+ * @param attributes
+ * @param defaultInterfaceClass
+ * @param environment
+ * @return
+ * @since 2.7.3
+ */
+ public static ServiceBeanNameBuilder create(AnnotationAttributes attributes, Class<?> defaultInterfaceClass, Environment environment) {
+ return new ServiceBeanNameBuilder(attributes, defaultInterfaceClass, environment);
}
public static ServiceBeanNameBuilder create(Class<?> interfaceClass, Environment environment) {
@@ -74,16 +82,16 @@ public class ServiceBeanNameBuilder {
}
public static ServiceBeanNameBuilder create(Service service, Class<?> interfaceClass, Environment environment) {
- return new ServiceBeanNameBuilder(service, interfaceClass, environment);
+ return create(getAnnotationAttributes(service, false, false), interfaceClass, environment);
}
public static ServiceBeanNameBuilder create(Reference reference, Class<?> interfaceClass, Environment environment) {
- return new ServiceBeanNameBuilder(reference, interfaceClass, environment);
+ return create(getAnnotationAttributes(reference, false, false), interfaceClass, environment);
}
private static void append(StringBuilder builder, String value) {
if (StringUtils.hasText(value)) {
- builder.append(value).append(SEPARATOR);
+ builder.append(SEPARATOR).append(value);
}
}
@@ -98,14 +106,14 @@ public class ServiceBeanNameBuilder {
}
public String build() {
- StringBuilder beanNameBuilder = new StringBuilder("ServiceBean").append(SEPARATOR);
+ StringBuilder beanNameBuilder = new StringBuilder("ServiceBean");
// Required
append(beanNameBuilder, interfaceClassName);
// Optional
append(beanNameBuilder, version);
append(beanNameBuilder, group);
// Build and remove last ":"
- String rawBeanName = beanNameBuilder.substring(0, beanNameBuilder.length() - 1);
+ String rawBeanName = beanNameBuilder.toString();
// Resolve placeholders
return environment.resolvePlaceholders(rawBeanName);
}
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 9832e10..600c1b7 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
@@ -19,9 +19,11 @@ package org.apache.dubbo.config.spring.util;
import org.apache.dubbo.config.annotation.Reference;
import org.apache.dubbo.config.annotation.Service;
+import org.springframework.core.annotation.AnnotationAttributes;
import org.springframework.core.env.Environment;
import org.springframework.core.env.PropertyResolver;
-import org.springframework.util.StringUtils;
+import org.springframework.util.Assert;
+import org.springframework.util.ClassUtils;
import java.lang.annotation.Annotation;
import java.lang.annotation.ElementType;
@@ -41,8 +43,11 @@ import static java.lang.String.valueOf;
import static org.springframework.core.annotation.AnnotationUtils.findAnnotation;
import static org.springframework.core.annotation.AnnotationUtils.getAnnotationAttributes;
import static org.springframework.core.annotation.AnnotationUtils.getDefaultValue;
+import static org.springframework.util.ClassUtils.getAllInterfacesForClass;
+import static org.springframework.util.ClassUtils.resolveClassName;
import static org.springframework.util.CollectionUtils.arrayToList;
import static org.springframework.util.ObjectUtils.nullSafeEquals;
+import static org.springframework.util.StringUtils.hasText;
import static org.springframework.util.StringUtils.trimWhitespace;
/**
@@ -53,11 +58,13 @@ import static org.springframework.util.StringUtils.trimWhitespace;
*/
public class AnnotationUtils {
+
+ @Deprecated
public static String resolveInterfaceName(Service service, Class<?> defaultInterfaceClass)
throws IllegalStateException {
String interfaceName;
- if (StringUtils.hasText(service.interfaceName())) {
+ if (hasText(service.interfaceName())) {
interfaceName = service.interfaceName();
} else if (!void.class.equals(service.interfaceClass())) {
interfaceName = service.interfaceClass().getName();
@@ -73,6 +80,85 @@ public class AnnotationUtils {
}
+ /**
+ * Resolve the interface name from {@link AnnotationAttributes}
+ *
+ * @param attributes {@link AnnotationAttributes} instance, may be {@link Service @Service} or {@link Reference @Reference}
+ * @param defaultInterfaceClass the default {@link Class class} of interface
+ * @return the interface name if found
+ * @throws IllegalStateException if interface name was not found
+ */
+ public static String resolveInterfaceName(AnnotationAttributes attributes, Class<?> defaultInterfaceClass) {
+
+ String interfaceName = null;
+
+ Class<?> interfaceClass = attributes.getClass("interfaceClass");
+ if (interfaceClass != null && !void.class.equals(interfaceClass)) {
+ interfaceName = interfaceClass.getName();
+ } else if ((!hasText(interfaceName = attributes.getString("interfaceName")))) {
+ interfaceName = defaultInterfaceClass.isInterface() ? defaultInterfaceClass.getName() : null;
+ }
+
+ if (!hasText(interfaceName)) {
+ throw new IllegalStateException(
+ "The @Service undefined interfaceClass or interfaceName, and the type "
+ + defaultInterfaceClass.getName() + " is not a interface.");
+ }
+
+ return interfaceName;
+ }
+
+ /**
+ * Resolve the {@link Class class} of Dubbo Service interface from the specified
+ * {@link AnnotationAttributes annotation attributes} and annotated {@link Class class}.
+ *
+ * @param attributes {@link AnnotationAttributes annotation attributes}
+ * @param annotatedClass the annotated {@link Class class}.
+ * @return the {@link Class class} of Dubbo Service interface
+ * @throws IllegalArgumentException if can't resolved
+ */
+ public static Class<?> resolveServiceInterfaceClass(AnnotationAttributes attributes, Class<?> annotatedClass)
+ throws IllegalArgumentException {
+
+ ClassLoader classLoader = annotatedClass.getClassLoader();
+
+ Class<?> interfaceClass = attributes.getClass("interfaceClass");
+
+ if (void.class.equals(interfaceClass)) { // default or set void.class for purpose.
+
+ interfaceClass = null;
+
+ String interfaceClassName = attributes.getString("interfaceName");
+
+ if (hasText(interfaceClassName)) {
+ if (ClassUtils.isPresent(interfaceClassName, classLoader)) {
+ interfaceClass = resolveClassName(interfaceClassName, classLoader);
+ }
+ }
+
+ }
+
+ if (interfaceClass == null) {
+ // Find all interfaces from the annotated class
+ // To resolve an issue : https://github.com/apache/dubbo/issues/3251
+ Class<?>[] allInterfaces = getAllInterfacesForClass(annotatedClass);
+
+ if (allInterfaces.length > 0) {
+ interfaceClass = allInterfaces[0];
+ }
+
+ }
+
+ Assert.notNull(interfaceClass,
+ "@Service interfaceClass() or interfaceName() or interface class must be present!");
+
+ Assert.isTrue(interfaceClass.isInterface(),
+ "The type that was annotated @Service is not an interface!");
+
+ return interfaceClass;
+ }
+
+ @Deprecated
public static String resolveInterfaceName(Reference reference, Class<?> defaultInterfaceClass)
throws IllegalStateException {
@@ -262,10 +348,10 @@ public class AnnotationUtils {
* @since 2.7.1
* ignore annotation member
*/
- if (attributeValue.getClass().isAnnotation()){
+ if (attributeValue.getClass().isAnnotation()) {
continue;
}
- if (attributeValue.getClass().isArray() && attributeValue.getClass().getComponentType().isAnnotation()){
+ if (attributeValue.getClass().isArray() && attributeValue.getClass().getComponentType().isAnnotation()) {
continue;
}
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/context/annotation/provider/HelloServiceImpl.java b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/context/annotation/provider/HelloServiceImpl.java
index 982e52a..0044ea8 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/context/annotation/provider/HelloServiceImpl.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/context/annotation/provider/HelloServiceImpl.java
@@ -16,9 +16,10 @@
*/
package org.apache.dubbo.config.spring.context.annotation.provider;
-import org.apache.dubbo.config.annotation.Service;
import org.apache.dubbo.config.spring.api.HelloService;
+import com.alibaba.dubbo.config.annotation.Service;
+
/**
* {@link HelloService} Implementation just annotating Dubbo's {@link Service}
*
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/context/context/annotation/provider/ProviderConfiguration.java b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/context/context/annotation/provider/ProviderConfiguration.java
index c773228..9c45d71 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/context/context/annotation/provider/ProviderConfiguration.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/context/context/annotation/provider/ProviderConfiguration.java
@@ -22,6 +22,7 @@ import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.config.spring.context.annotation.DubboComponentScan;
import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Primary;
import org.springframework.context.annotation.PropertySource;
import org.springframework.transaction.PlatformTransactionManager;
@@ -30,7 +31,8 @@ import org.springframework.transaction.TransactionException;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.annotation.EnableTransactionManagement;
-@DubboComponentScan(basePackages = "org.apache.dubbo.config.spring.context.annotation.provider")
+@DubboComponentScan(basePackages = "org.apache.dubbo")
+@ComponentScan(basePackages = "org.apache.dubbo")
@PropertySource("META-INF/default.properties")
@EnableTransactionManagement
public class ProviderConfiguration {
diff --git a/dubbo-dependencies-bom/pom.xml b/dubbo-dependencies-bom/pom.xml
index 20c17b6..cdbe2bc 100644
--- a/dubbo-dependencies-bom/pom.xml
+++ b/dubbo-dependencies-bom/pom.xml
@@ -128,7 +128,7 @@
<resteasy_version>3.0.19.Final</resteasy_version>
<tomcat_embed_version>8.5.31</tomcat_embed_version>
<jetcd_version>0.3.0</jetcd_version>
- <nacos_version>1.0.0</nacos_version>
+ <nacos_version>1.0.1</nacos_version>
<!-- Log libs -->
<slf4j_version>1.7.25</slf4j_version>
<jcl_version>1.2</jcl_version>
diff --git a/dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/NacosRegistryFactory.java b/dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/NacosRegistryFactory.java
index 2b66fb1..d702acf 100644
--- a/dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/NacosRegistryFactory.java
+++ b/dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/NacosRegistryFactory.java
@@ -17,6 +17,7 @@
package org.apache.dubbo.registry.nacos;
import org.apache.dubbo.common.URL;
+import org.apache.dubbo.common.utils.StringUtils;
import org.apache.dubbo.registry.Registry;
import org.apache.dubbo.registry.RegistryFactory;
import org.apache.dubbo.registry.support.AbstractRegistryFactory;
@@ -24,7 +25,6 @@ import org.apache.dubbo.registry.support.AbstractRegistryFactory;
import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.api.naming.NamingService;
-import com.alibaba.nacos.client.naming.utils.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;