You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by il...@apache.org on 2018/10/29 07:33:21 UTC

[incubator-dubbo] branch 2.6.x updated: Bug Fix & Enhancement (#2687)

This is an automated email from the ASF dual-hosted git repository.

iluo pushed a commit to branch 2.6.x
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git


The following commit(s) were added to refs/heads/2.6.x by this push:
     new bb9fd69  Bug Fix & Enhancement (#2687)
bb9fd69 is described below

commit bb9fd69233f0e81c3a47709b323dd4d835fcc301
Author: 小马哥 <me...@gmail.com>
AuthorDate: Mon Oct 29 15:33:16 2018 +0800

    Bug Fix & Enhancement (#2687)
    
    * Polish apache/incubator-dubbo#2235 apache/incubator-dubbo#2251 apache/incubator-dubbo-spring-boot-project#243
    
    * Fixed bugs and optimized imports
    
    * Remove local PropertySourcesUtils and re-use it from spring-context-extras
    
    * Add Test cases for YAML properties
    issues :
    apache/incubator-dubbo-spring-boot-project/issues/273
    
    * Optimize imports using code-style template
    
    * Refactor Utilities class
    
    * Fixed test cases
    
    * [Enhancement] @EnableDubboConfigBinding annotates @Repeatable apache/incubator-dubbo#1770
    
    * Bug fix
    
    * Remove feature :
    [Enhancement] @EnableDubboConfigBinding annotates @Repeatable apache/incubator-dubbo#1770
---
 dependencies-bom/pom.xml                           |  18 +++-
 dubbo-config/dubbo-config-spring/pom.xml           |   5 +
 .../alibaba/dubbo/config/spring/ReferenceBean.java |   1 +
 .../AbstractAnnotationConfigBeanBuilder.java       |   4 +-
 .../AnnotationPropertyValuesAdapter.java           |   3 +-
 .../DubboConfigBindingBeanPostProcessor.java       |   1 +
 .../ReferenceAnnotationBeanPostProcessor.java      |   2 +-
 .../factory/annotation/ReferenceBeanBuilder.java   |   5 +-
 .../ServiceAnnotationBeanPostProcessor.java        |   3 +-
 .../factory/annotation/ServiceBeanNameBuilder.java |   2 +
 .../context/annotation/DubboComponentScan.java     |   1 +
 .../annotation/DubboComponentScanRegistrar.java    |   1 +
 .../annotation/DubboConfigBindingRegistrar.java    |  13 +--
 .../annotation/DubboConfigBindingsRegistrar.java   |   1 +
 .../annotation/DubboConfigConfiguration.java       |   1 +
 .../DubboConfigConfigurationSelector.java          |   1 +
 .../spring/context/annotation/EnableDubbo.java     |   1 +
 .../context/annotation/EnableDubboConfig.java      |   1 +
 .../annotation/EnableDubboConfigBinding.java       |   1 +
 .../context/event/ServiceBeanExportedEvent.java    |   1 +
 .../properties/DefaultDubboConfigBinder.java       |   5 +-
 .../context/properties/DubboConfigBinder.java      |   1 +
 .../schema/AnnotationBeanDefinitionParser.java     |   1 +
 .../spring/schema/DubboNamespaceHandler.java       |   1 +
 .../spring/status/DataSourceStatusChecker.java     |   1 +
 .../config/spring/status/SpringStatusChecker.java  |   1 +
 .../dubbo/config/spring/util/AnnotationUtils.java  |  61 -----------
 .../dubbo/config/spring/util/BeanFactoryUtils.java |  92 -----------------
 .../dubbo/config/spring/util/ObjectUtils.java      |  37 -------
 .../config/spring/util/PropertySourcesUtils.java   |  75 --------------
 .../alibaba/dubbo/config/spring/ConfigTest.java    |   1 +
 .../dubbo/config/spring/ServiceBeanTest.java       |   1 +
 .../spring/action/DemoActionByAnnotation.java      |   1 +
 .../annotation/consumer/AnnotationAction.java      |   1 +
 .../AnnotationPropertyValuesAdapterTest.java       |   1 +
 .../DubboConfigBindingBeanPostProcessorTest.java   |   1 +
 .../ReferenceAnnotationBeanPostProcessorTest.java  |   3 +-
 .../ServiceAnnotationBeanPostProcessorTest.java    |   1 +
 .../ServiceAnnotationTestConfiguration.java        |   1 +
 .../annotation/ServiceBeanNameBuilderTest.java     |   1 +
 .../factory/config/YamlPropertySourceFactory.java  |  76 ++++++++++++++
 .../config/YamlPropertySourceFactoryTest.java      |  71 +++++++++++++
 .../DubboComponentScanRegistrarTest.java           |   1 +
 .../DubboConfigBindingRegistrarTest.java           |   1 +
 .../DubboConfigBindingsRegistrarTest.java          |   1 +
 .../annotation/DubboConfigConfigurationTest.java   |   1 +
 .../context/annotation/EnableDubboConfigTest.java  |   1 +
 .../spring/context/annotation/EnableDubboTest.java |   1 +
 .../annotation/consumer/ConsumerConfiguration.java |   1 +
 .../consumer/test/TestConsumerConfiguration.java   |   1 +
 .../annotation/provider/DefaultHelloService.java   |   1 +
 .../annotation/provider/DemoServiceImpl.java       |   1 +
 .../annotation/provider/ProviderConfiguration.java |   1 +
 .../properties/DefaultDubboConfigBinderTest.java   |  38 ++++++-
 .../spring/schema/DubboNamespaceHandlerTest.java   |   1 +
 .../spring/status/DataSourceStatusCheckerTest.java |   1 +
 .../spring/status/SpringStatusCheckerTest.java     |   1 +
 .../config/spring/util/BeanFactoryUtilsTest.java   | 111 ---------------------
 .../spring/util/PropertySourcesUtilsTest.java      |  74 --------------
 .../resources/META-INF/dubbb-consumer.properties   |   2 +-
 .../resources/META-INF/dubbb-provider.properties   |   2 +-
 .../src/test/resources/META-INF/dubbo.yml          |   8 ++
 .../src/test/resources/dubbo.properties            |   4 +-
 63 files changed, 278 insertions(+), 475 deletions(-)

diff --git a/dependencies-bom/pom.xml b/dependencies-bom/pom.xml
index e6bda8f..8da6b97 100644
--- a/dependencies-bom/pom.xml
+++ b/dependencies-bom/pom.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
 
     <parent>
@@ -29,8 +30,8 @@
         <url>https://github.com/apache/incubator-dubbo</url>
         <connection>scm:git:https://github.com/apache/incubator-dubbo.git</connection>
         <developerConnection>scm:git:https://github.com/apache/incubator-dubbo.git</developerConnection>
-      <tag>HEAD</tag>
-  </scm>
+        <tag>HEAD</tag>
+    </scm>
     <mailingLists>
         <mailingList>
             <name>Development List</name>
@@ -112,7 +113,8 @@
         <jaxb_version>2.2.7</jaxb_version>
         <activation_version>1.2.0</activation_version>
         <hessian_lite_version>3.2.4</hessian_lite_version>
-        <alibaba_spring_context_support_version>1.0.1</alibaba_spring_context_support_version>
+        <alibaba_spring_context_support_version>1.0.2</alibaba_spring_context_support_version>
+        <yaml_version>1.17</yaml_version>
     </properties>
 
     <dependencyManagement>
@@ -369,6 +371,13 @@
                 <version>${alibaba_spring_context_support_version}</version>
             </dependency>
 
+            <!-- YAML -->
+            <dependency>
+                <groupId>org.yaml</groupId>
+                <artifactId>snakeyaml</artifactId>
+                <version>${yaml_version}</version>
+            </dependency>
+
             <!-- Test lib -->
             <dependency>
                 <groupId>org.apache.curator</groupId>
@@ -382,6 +391,7 @@
                 <version>${embedded_redis_version}</version>
                 <scope>test</scope>
             </dependency>
+
         </dependencies>
     </dependencyManagement>
 
diff --git a/dubbo-config/dubbo-config-spring/pom.xml b/dubbo-config/dubbo-config-spring/pom.xml
index 8978c48..7697f6f 100644
--- a/dubbo-config/dubbo-config-spring/pom.xml
+++ b/dubbo-config/dubbo-config-spring/pom.xml
@@ -132,6 +132,11 @@
             <artifactId>tomcat-embed-core</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.yaml</groupId>
+            <artifactId>snakeyaml</artifactId>
+            <scope>test</scope>
+        </dependency>
 
     </dependencies>
     <build>
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/ReferenceBean.java b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/ReferenceBean.java
index 00a6bec..b2e548d 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/ReferenceBean.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/ReferenceBean.java
@@ -25,6 +25,7 @@ import com.alibaba.dubbo.config.RegistryConfig;
 import com.alibaba.dubbo.config.annotation.Reference;
 import com.alibaba.dubbo.config.spring.extension.SpringExtensionFactory;
 import com.alibaba.dubbo.config.support.Parameter;
+
 import org.springframework.beans.factory.BeanFactoryUtils;
 import org.springframework.beans.factory.DisposableBean;
 import org.springframework.beans.factory.FactoryBean;
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/AbstractAnnotationConfigBeanBuilder.java b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/AbstractAnnotationConfigBeanBuilder.java
index 0357ff0..7a4129f 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/AbstractAnnotationConfigBeanBuilder.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/AbstractAnnotationConfigBeanBuilder.java
@@ -30,8 +30,8 @@ import org.springframework.util.Assert;
 import java.lang.annotation.Annotation;
 import java.util.List;
 
-import static com.alibaba.dubbo.config.spring.util.BeanFactoryUtils.getBeans;
-import static com.alibaba.dubbo.config.spring.util.BeanFactoryUtils.getOptionalBean;
+import static com.alibaba.spring.util.BeanFactoryUtils.getBeans;
+import static com.alibaba.spring.util.BeanFactoryUtils.getOptionalBean;
 
 /**
  * Abstract Configurable {@link Annotation} Bean Builder
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/AnnotationPropertyValuesAdapter.java b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/AnnotationPropertyValuesAdapter.java
index 751399f..29a8acc 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/AnnotationPropertyValuesAdapter.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/AnnotationPropertyValuesAdapter.java
@@ -23,7 +23,8 @@ import org.springframework.core.env.PropertyResolver;
 
 import java.lang.annotation.Annotation;
 
-import static com.alibaba.dubbo.config.spring.util.AnnotationUtils.getAttributes;
+import static com.alibaba.spring.util.AnnotationUtils.getAttributes;
+
 
 /**
  * {@link Annotation} {@link PropertyValues} Adapter
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/DubboConfigBindingBeanPostProcessor.java b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/DubboConfigBindingBeanPostProcessor.java
index cbb5435..46ace14 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/DubboConfigBindingBeanPostProcessor.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/DubboConfigBindingBeanPostProcessor.java
@@ -22,6 +22,7 @@ import com.alibaba.dubbo.config.spring.context.annotation.DubboConfigBindingRegi
 import com.alibaba.dubbo.config.spring.context.annotation.EnableDubboConfigBinding;
 import com.alibaba.dubbo.config.spring.context.properties.DefaultDubboConfigBinder;
 import com.alibaba.dubbo.config.spring.context.properties.DubboConfigBinder;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.springframework.beans.BeansException;
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/ReferenceAnnotationBeanPostProcessor.java b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/ReferenceAnnotationBeanPostProcessor.java
index 2e45c69..517c625 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/ReferenceAnnotationBeanPostProcessor.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/ReferenceAnnotationBeanPostProcessor.java
@@ -20,8 +20,8 @@ import com.alibaba.dubbo.config.annotation.Reference;
 import com.alibaba.dubbo.config.spring.ReferenceBean;
 import com.alibaba.dubbo.config.spring.ServiceBean;
 import com.alibaba.dubbo.config.spring.context.event.ServiceBeanExportedEvent;
-import com.alibaba.dubbo.config.spring.util.AnnotationUtils;
 import com.alibaba.spring.beans.factory.annotation.AnnotationInjectedBeanPostProcessor;
+import com.alibaba.spring.util.AnnotationUtils;
 
 import org.springframework.beans.BeansException;
 import org.springframework.beans.factory.annotation.InjectionMetadata;
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/ReferenceBeanBuilder.java b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/ReferenceBeanBuilder.java
index 883a56a..7b5288d 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/ReferenceBeanBuilder.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/ReferenceBeanBuilder.java
@@ -20,6 +20,7 @@ import com.alibaba.dubbo.common.utils.CollectionUtils;
 import com.alibaba.dubbo.config.ConsumerConfig;
 import com.alibaba.dubbo.config.annotation.Reference;
 import com.alibaba.dubbo.config.spring.ReferenceBean;
+
 import org.springframework.beans.propertyeditors.StringTrimmerEditor;
 import org.springframework.context.ApplicationContext;
 import org.springframework.util.Assert;
@@ -30,8 +31,8 @@ import org.springframework.validation.DataBinder;
 import java.beans.PropertyEditorSupport;
 import java.util.Map;
 
-import static com.alibaba.dubbo.config.spring.util.BeanFactoryUtils.getOptionalBean;
-import static com.alibaba.dubbo.config.spring.util.ObjectUtils.of;
+import static com.alibaba.spring.util.BeanFactoryUtils.getOptionalBean;
+import static com.alibaba.spring.util.ObjectUtils.of;
 import static org.springframework.util.StringUtils.commaDelimitedListToStringArray;
 
 /**
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 df46850..9ba4cc5 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
@@ -21,6 +21,7 @@ import com.alibaba.dubbo.common.logger.LoggerFactory;
 import com.alibaba.dubbo.config.annotation.Service;
 import com.alibaba.dubbo.config.spring.ServiceBean;
 import com.alibaba.dubbo.config.spring.context.annotation.DubboClassPathBeanDefinitionScanner;
+
 import org.springframework.beans.BeansException;
 import org.springframework.beans.MutablePropertyValues;
 import org.springframework.beans.factory.BeanClassLoaderAware;
@@ -56,7 +57,7 @@ import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
 
-import static com.alibaba.dubbo.config.spring.util.ObjectUtils.of;
+import static com.alibaba.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;
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/ServiceBeanNameBuilder.java b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/ServiceBeanNameBuilder.java
index b80840c..06b2dfa 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/ServiceBeanNameBuilder.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/ServiceBeanNameBuilder.java
@@ -20,11 +20,13 @@ import com.alibaba.dubbo.config.annotation.Reference;
 import com.alibaba.dubbo.config.annotation.Service;
 import com.alibaba.dubbo.config.spring.ReferenceBean;
 import com.alibaba.dubbo.config.spring.ServiceBean;
+
 import org.springframework.core.env.Environment;
 import org.springframework.util.StringUtils;
 
 import static com.alibaba.dubbo.config.spring.util.AnnotationUtils.resolveInterfaceName;
 
+
 /**
  * Dubbo {@link Service @Service} Bean Builder
  *
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/annotation/DubboComponentScan.java b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/annotation/DubboComponentScan.java
index a0d1739..593949e 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/annotation/DubboComponentScan.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/annotation/DubboComponentScan.java
@@ -18,6 +18,7 @@ package com.alibaba.dubbo.config.spring.context.annotation;
 
 import com.alibaba.dubbo.config.annotation.Reference;
 import com.alibaba.dubbo.config.annotation.Service;
+
 import org.springframework.context.annotation.Import;
 
 import java.lang.annotation.Annotation;
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/annotation/DubboComponentScanRegistrar.java b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/annotation/DubboComponentScanRegistrar.java
index 6423176..2821b1f 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/annotation/DubboComponentScanRegistrar.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/annotation/DubboComponentScanRegistrar.java
@@ -20,6 +20,7 @@ import com.alibaba.dubbo.config.annotation.Service;
 import com.alibaba.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor;
 import com.alibaba.dubbo.config.spring.beans.factory.annotation.ServiceAnnotationBeanPostProcessor;
 import com.alibaba.dubbo.config.spring.util.BeanRegistrar;
+
 import org.springframework.beans.factory.BeanFactory;
 import org.springframework.beans.factory.config.BeanDefinition;
 import org.springframework.beans.factory.support.AbstractBeanDefinition;
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/annotation/DubboConfigBindingRegistrar.java b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/annotation/DubboConfigBindingRegistrar.java
index 6936787..8e8cf20 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/annotation/DubboConfigBindingRegistrar.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/annotation/DubboConfigBindingRegistrar.java
@@ -18,6 +18,7 @@ package com.alibaba.dubbo.config.spring.context.annotation;
 
 import com.alibaba.dubbo.config.AbstractConfig;
 import com.alibaba.dubbo.config.spring.beans.factory.annotation.DubboConfigBindingBeanPostProcessor;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.springframework.beans.factory.config.BeanDefinition;
@@ -40,8 +41,8 @@ import java.util.LinkedHashSet;
 import java.util.Map;
 import java.util.Set;
 
-import static com.alibaba.dubbo.config.spring.util.PropertySourcesUtils.getSubProperties;
-import static com.alibaba.dubbo.config.spring.util.PropertySourcesUtils.normalizePrefix;
+import static com.alibaba.spring.util.PropertySourcesUtils.getSubProperties;
+import static com.alibaba.spring.util.PropertySourcesUtils.normalizePrefix;
 import static org.springframework.beans.factory.support.BeanDefinitionBuilder.rootBeanDefinition;
 import static org.springframework.beans.factory.support.BeanDefinitionReaderUtils.registerWithGeneratedName;
 
@@ -85,7 +86,7 @@ public class DubboConfigBindingRegistrar implements ImportBeanDefinitionRegistra
                                           boolean multiple,
                                           BeanDefinitionRegistry registry) {
 
-        Map<String, String> properties = getSubProperties(environment.getPropertySources(), prefix);
+        Map<String, Object> properties = getSubProperties(environment.getPropertySources(), prefix);
 
         if (CollectionUtils.isEmpty(properties)) {
             if (log.isDebugEnabled()) {
@@ -157,7 +158,7 @@ public class DubboConfigBindingRegistrar implements ImportBeanDefinitionRegistra
 
     }
 
-    private Set<String> resolveMultipleBeanNames(Map<String, String> properties) {
+    private Set<String> resolveMultipleBeanNames(Map<String, Object> properties) {
 
         Set<String> beanNames = new LinkedHashSet<String>();
 
@@ -178,10 +179,10 @@ public class DubboConfigBindingRegistrar implements ImportBeanDefinitionRegistra
 
     }
 
-    private String resolveSingleBeanName(Map<String, String> properties, Class<? extends AbstractConfig> configClass,
+    private String resolveSingleBeanName(Map<String, Object> properties, Class<? extends AbstractConfig> configClass,
                                          BeanDefinitionRegistry registry) {
 
-        String beanName = properties.get("id");
+        String beanName = (String) properties.get("id");
 
         if (!StringUtils.hasText(beanName)) {
             BeanDefinitionBuilder builder = rootBeanDefinition(configClass);
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/annotation/DubboConfigBindingsRegistrar.java b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/annotation/DubboConfigBindingsRegistrar.java
index a035a2b..8646678 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/annotation/DubboConfigBindingsRegistrar.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/annotation/DubboConfigBindingsRegistrar.java
@@ -17,6 +17,7 @@
 package com.alibaba.dubbo.config.spring.context.annotation;
 
 import com.alibaba.dubbo.config.AbstractConfig;
+
 import org.springframework.beans.factory.support.BeanDefinitionRegistry;
 import org.springframework.context.EnvironmentAware;
 import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/annotation/DubboConfigConfiguration.java b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/annotation/DubboConfigConfiguration.java
index 0c20493..ba4b344 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/annotation/DubboConfigConfiguration.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/annotation/DubboConfigConfiguration.java
@@ -24,6 +24,7 @@ import com.alibaba.dubbo.config.MonitorConfig;
 import com.alibaba.dubbo.config.ProtocolConfig;
 import com.alibaba.dubbo.config.ProviderConfig;
 import com.alibaba.dubbo.config.RegistryConfig;
+
 import org.springframework.context.annotation.Configuration;
 
 /**
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/annotation/DubboConfigConfigurationSelector.java b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/annotation/DubboConfigConfigurationSelector.java
index 8c46ff5..24f581b 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/annotation/DubboConfigConfigurationSelector.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/annotation/DubboConfigConfigurationSelector.java
@@ -17,6 +17,7 @@
 package com.alibaba.dubbo.config.spring.context.annotation;
 
 import com.alibaba.dubbo.config.AbstractConfig;
+
 import org.springframework.context.annotation.ImportSelector;
 import org.springframework.core.Ordered;
 import org.springframework.core.annotation.AnnotationAttributes;
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/annotation/EnableDubbo.java b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/annotation/EnableDubbo.java
index 53bd883..25d8cad 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/annotation/EnableDubbo.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/annotation/EnableDubbo.java
@@ -17,6 +17,7 @@
 package com.alibaba.dubbo.config.spring.context.annotation;
 
 import com.alibaba.dubbo.config.AbstractConfig;
+
 import org.springframework.core.annotation.AliasFor;
 
 import java.lang.annotation.Documented;
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/annotation/EnableDubboConfig.java b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/annotation/EnableDubboConfig.java
index e5e9e12..fe20770 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/annotation/EnableDubboConfig.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/annotation/EnableDubboConfig.java
@@ -23,6 +23,7 @@ import com.alibaba.dubbo.config.MonitorConfig;
 import com.alibaba.dubbo.config.ProtocolConfig;
 import com.alibaba.dubbo.config.ProviderConfig;
 import com.alibaba.dubbo.config.RegistryConfig;
+
 import org.springframework.context.annotation.Import;
 
 import java.lang.annotation.Documented;
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/annotation/EnableDubboConfigBinding.java b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/annotation/EnableDubboConfigBinding.java
index f032cf6..ba87c16 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/annotation/EnableDubboConfigBinding.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/annotation/EnableDubboConfigBinding.java
@@ -21,6 +21,7 @@ import com.alibaba.dubbo.config.ApplicationConfig;
 import com.alibaba.dubbo.config.ModuleConfig;
 import com.alibaba.dubbo.config.RegistryConfig;
 import com.alibaba.dubbo.config.spring.beans.factory.annotation.DubboConfigBindingBeanPostProcessor;
+
 import org.springframework.context.annotation.Import;
 import org.springframework.core.env.PropertySources;
 
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/event/ServiceBeanExportedEvent.java b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/event/ServiceBeanExportedEvent.java
index 3b14d01..333da08 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/event/ServiceBeanExportedEvent.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/event/ServiceBeanExportedEvent.java
@@ -17,6 +17,7 @@
 package com.alibaba.dubbo.config.spring.context.event;
 
 import com.alibaba.dubbo.config.spring.ServiceBean;
+
 import org.springframework.context.ApplicationEvent;
 import org.springframework.context.ApplicationListener;
 
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/properties/DefaultDubboConfigBinder.java b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/properties/DefaultDubboConfigBinder.java
index 52cc87c..045a5ac 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/properties/DefaultDubboConfigBinder.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/properties/DefaultDubboConfigBinder.java
@@ -17,12 +17,13 @@
 package com.alibaba.dubbo.config.spring.context.properties;
 
 import com.alibaba.dubbo.config.AbstractConfig;
+
 import org.springframework.beans.MutablePropertyValues;
 import org.springframework.validation.DataBinder;
 
 import java.util.Map;
 
-import static com.alibaba.dubbo.config.spring.util.PropertySourcesUtils.getSubProperties;
+import static com.alibaba.spring.util.PropertySourcesUtils.getSubProperties;
 
 /**
  * Default {@link DubboConfigBinder} implementation based on Spring {@link DataBinder}
@@ -36,7 +37,7 @@ public class DefaultDubboConfigBinder extends AbstractDubboConfigBinder {
         dataBinder.setIgnoreInvalidFields(isIgnoreInvalidFields());
         dataBinder.setIgnoreUnknownFields(isIgnoreUnknownFields());
         // Get properties under specified prefix from PropertySources
-        Map<String, String> properties = getSubProperties(getPropertySources(), prefix);
+        Map<String, Object> properties = getSubProperties(getPropertySources(), prefix);
         // Convert Map to MutablePropertyValues
         MutablePropertyValues propertyValues = new MutablePropertyValues(properties);
         // Bind
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/properties/DubboConfigBinder.java b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/properties/DubboConfigBinder.java
index 6ebb862..52ebdfe 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/properties/DubboConfigBinder.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/context/properties/DubboConfigBinder.java
@@ -17,6 +17,7 @@
 package com.alibaba.dubbo.config.spring.context.properties;
 
 import com.alibaba.dubbo.config.AbstractConfig;
+
 import org.springframework.context.EnvironmentAware;
 
 /**
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/schema/AnnotationBeanDefinitionParser.java b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/schema/AnnotationBeanDefinitionParser.java
index cf4ef36..084e9dd 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/schema/AnnotationBeanDefinitionParser.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/schema/AnnotationBeanDefinitionParser.java
@@ -20,6 +20,7 @@ import com.alibaba.dubbo.config.spring.AnnotationBean;
 import com.alibaba.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor;
 import com.alibaba.dubbo.config.spring.beans.factory.annotation.ServiceAnnotationBeanPostProcessor;
 import com.alibaba.dubbo.config.spring.util.BeanRegistrar;
+
 import org.springframework.beans.factory.BeanFactory;
 import org.springframework.beans.factory.config.BeanDefinition;
 import org.springframework.beans.factory.support.BeanDefinitionBuilder;
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/schema/DubboNamespaceHandler.java b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/schema/DubboNamespaceHandler.java
index 81c0995..7336ff5 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/schema/DubboNamespaceHandler.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/schema/DubboNamespaceHandler.java
@@ -26,6 +26,7 @@ import com.alibaba.dubbo.config.ProviderConfig;
 import com.alibaba.dubbo.config.RegistryConfig;
 import com.alibaba.dubbo.config.spring.ReferenceBean;
 import com.alibaba.dubbo.config.spring.ServiceBean;
+
 import org.springframework.beans.factory.xml.NamespaceHandlerSupport;
 
 /**
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/status/DataSourceStatusChecker.java b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/status/DataSourceStatusChecker.java
index 99c42ab..fd0e32d 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/status/DataSourceStatusChecker.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/status/DataSourceStatusChecker.java
@@ -22,6 +22,7 @@ import com.alibaba.dubbo.common.logger.LoggerFactory;
 import com.alibaba.dubbo.common.status.Status;
 import com.alibaba.dubbo.common.status.StatusChecker;
 import com.alibaba.dubbo.config.spring.ServiceBean;
+
 import org.springframework.context.ApplicationContext;
 
 import javax.sql.DataSource;
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/status/SpringStatusChecker.java b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/status/SpringStatusChecker.java
index 3bdc996..f722c91 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/status/SpringStatusChecker.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/status/SpringStatusChecker.java
@@ -22,6 +22,7 @@ import com.alibaba.dubbo.common.logger.LoggerFactory;
 import com.alibaba.dubbo.common.status.Status;
 import com.alibaba.dubbo.common.status.StatusChecker;
 import com.alibaba.dubbo.config.spring.ServiceBean;
+
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.Lifecycle;
 
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/util/AnnotationUtils.java b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/util/AnnotationUtils.java
index f9b3c61..7e5bb49 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/util/AnnotationUtils.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/util/AnnotationUtils.java
@@ -19,22 +19,8 @@ package com.alibaba.dubbo.config.spring.util;
 import com.alibaba.dubbo.config.annotation.Reference;
 import com.alibaba.dubbo.config.annotation.Service;
 
-import org.springframework.core.env.PropertyResolver;
 import org.springframework.util.StringUtils;
 
-import java.lang.annotation.Annotation;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Set;
-
-import static java.lang.String.valueOf;
-import static org.springframework.core.annotation.AnnotationUtils.getAnnotationAttributes;
-import static org.springframework.core.annotation.AnnotationUtils.getDefaultValue;
-import static org.springframework.util.CollectionUtils.arrayToList;
-import static org.springframework.util.ObjectUtils.nullSafeEquals;
-import static org.springframework.util.StringUtils.trimAllWhitespace;
-
 /**
  * Annotation Utilities Class
  *
@@ -43,53 +29,6 @@ import static org.springframework.util.StringUtils.trimAllWhitespace;
  */
 public class AnnotationUtils {
 
-    /**
-     * Get {@link Annotation} attributes
-     *
-     * @param annotation
-     * @param propertyResolver
-     * @param ignoreDefaultValue
-     * @return non-null
-     */
-    public static Map<String, Object> getAttributes(Annotation annotation, PropertyResolver propertyResolver,
-                                                    boolean ignoreDefaultValue, String... ignoreAttributeNames) {
-
-        Set<String> ignoreAttributeNamesSet = new HashSet<String>(arrayToList(ignoreAttributeNames));
-
-        Map<String, Object> attributes = getAnnotationAttributes(annotation);
-
-        Map<String, Object> actualAttributes = new LinkedHashMap<String, Object>();
-
-        boolean requiredResolve = propertyResolver != null;
-
-        for (Map.Entry<String, Object> entry : attributes.entrySet()) {
-
-            String attributeName = entry.getKey();
-            Object attributeValue = entry.getValue();
-
-            // ignore default attribute value
-            if (ignoreDefaultValue && nullSafeEquals(attributeValue, getDefaultValue(annotation, attributeName))) {
-                continue;
-            }
-
-            // ignore attribute name
-            if (ignoreAttributeNamesSet.contains(attributeName)) {
-                continue;
-            }
-
-            if (requiredResolve && attributeValue instanceof String) { // Resolve Placeholder
-                String resolvedValue = propertyResolver.resolvePlaceholders(valueOf(attributeValue));
-                attributeValue = trimAllWhitespace(resolvedValue);
-            }
-
-            actualAttributes.put(attributeName, attributeValue);
-
-        }
-
-        return actualAttributes;
-
-    }
-
     public static String resolveInterfaceName(Service service, Class<?> defaultInterfaceClass)
             throws IllegalStateException {
 
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/util/BeanFactoryUtils.java b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/util/BeanFactoryUtils.java
deleted file mode 100644
index 16aa120..0000000
--- a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/util/BeanFactoryUtils.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.alibaba.dubbo.config.spring.util;
-
-import com.alibaba.dubbo.common.utils.StringUtils;
-import org.springframework.beans.factory.BeanFactory;
-import org.springframework.beans.factory.ListableBeanFactory;
-import org.springframework.beans.factory.config.ConfigurableBeanFactory;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import static org.springframework.beans.factory.BeanFactoryUtils.beanNamesForTypeIncludingAncestors;
-import static org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors;
-
-/**
- * {@link BeanFactory} Utilities class
- *
- * @see BeanFactory
- * @see ConfigurableBeanFactory
- * @see org.springframework.beans.factory.BeanFactoryUtils
- * @since 2.5.7
- */
-public class BeanFactoryUtils {
-
-
-    /**
-     * Get optional Bean
-     *
-     * @param beanFactory {@link ListableBeanFactory}
-     * @param beanName    the name of Bean
-     * @param beanType    the {@link Class type} of Bean
-     * @param <T>         the {@link Class type} of Bean
-     * @return A bean if present , or <code>null</code>
-     */
-    public static <T> T getOptionalBean(ListableBeanFactory beanFactory, String beanName, Class<T> beanType) {
-
-        String[] allBeanNames = beanNamesForTypeIncludingAncestors(beanFactory, beanType);
-
-        if (!StringUtils.isContains(allBeanNames, beanName)) {
-            return null;
-        }
-
-        Map<String, T> beansOfType = beansOfTypeIncludingAncestors(beanFactory, beanType);
-
-        return beansOfType.get(beanName);
-
-    }
-
-
-    /**
-     * Gets name-matched Beans from {@link ListableBeanFactory BeanFactory}
-     *
-     * @param beanFactory {@link ListableBeanFactory BeanFactory}
-     * @param beanNames   the names of Bean
-     * @param beanType    the {@link Class type} of Bean
-     * @param <T>         the {@link Class type} of Bean
-     * @return
-     */
-    public static <T> List<T> getBeans(ListableBeanFactory beanFactory, String[] beanNames, Class<T> beanType) {
-
-        String[] allBeanNames = beanNamesForTypeIncludingAncestors(beanFactory, beanType);
-
-        List<T> beans = new ArrayList<T>(beanNames.length);
-
-        for (String beanName : beanNames) {
-            if (StringUtils.isContains(allBeanNames, beanName)) {
-                beans.add(beanFactory.getBean(beanName, beanType));
-            }
-        }
-
-        return Collections.unmodifiableList(beans);
-
-    }
-
-}
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/util/ObjectUtils.java b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/util/ObjectUtils.java
deleted file mode 100644
index 00db1e7..0000000
--- a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/util/ObjectUtils.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.alibaba.dubbo.config.spring.util;
-
-/**
- * Object Utilities Class
- *
- * @since 2.5.11
- */
-public class ObjectUtils {
-
-    /**
-     * of factory method
-     *
-     * @param values
-     * @param <T>
-     * @return
-     */
-    public static <T> T[] of(T... values) {
-        return values;
-    }
-
-}
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/util/PropertySourcesUtils.java b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/util/PropertySourcesUtils.java
deleted file mode 100644
index 5b183e1..0000000
--- a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/util/PropertySourcesUtils.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.alibaba.dubbo.config.spring.util;
-
-import org.springframework.core.env.EnumerablePropertySource;
-import org.springframework.core.env.PropertySource;
-import org.springframework.core.env.PropertySources;
-
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Properties;
-
-/**
- * {@link PropertySources} Utilities
- *
- * @see PropertySources
- * @since 2.5.8
- */
-public abstract class PropertySourcesUtils {
-
-    /**
-     * Get Sub {@link Properties}
-     *
-     * @param propertySources {@link PropertySource} Iterable
-     * @param prefix          the prefix of property name
-     * @return Map<String                                                                                                                                                                                                                                                               ,                                                                                                                                                                                                                    [...]
-     * @see Properties
-     */
-    public static Map<String, String> getSubProperties(Iterable<PropertySource<?>> propertySources, String prefix) {
-
-        Map<String, String> subProperties = new LinkedHashMap<String, String>();
-
-        String normalizedPrefix = normalizePrefix(prefix);
-
-        for (PropertySource<?> source : propertySources) {
-            if (source instanceof EnumerablePropertySource) {
-                for (String name : ((EnumerablePropertySource<?>) source).getPropertyNames()) {
-                    if (name.startsWith(normalizedPrefix)) {
-                        String subName = name.substring(normalizedPrefix.length());
-                        Object value = source.getProperty(name);
-                        subProperties.put(subName, String.valueOf(value));
-                    }
-                }
-            }
-        }
-
-        return subProperties;
-
-    }
-
-    /**
-     * Normalize the prefix
-     *
-     * @param prefix the prefix
-     * @return the prefix
-     */
-    public static String normalizePrefix(String prefix) {
-        return prefix.endsWith(".") ? prefix : prefix + ".";
-    }
-
-}
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/ConfigTest.java b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/ConfigTest.java
index c8eaee2..2415de4 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/ConfigTest.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/ConfigTest.java
@@ -46,6 +46,7 @@ import com.alibaba.dubbo.rpc.RpcContext;
 import com.alibaba.dubbo.rpc.RpcException;
 import com.alibaba.dubbo.rpc.service.GenericException;
 import com.alibaba.dubbo.rpc.service.GenericService;
+
 import org.junit.Assert;
 import org.junit.Ignore;
 import org.junit.Test;
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/ServiceBeanTest.java b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/ServiceBeanTest.java
index 11f7055..e965189 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/ServiceBeanTest.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/ServiceBeanTest.java
@@ -17,6 +17,7 @@
 package com.alibaba.dubbo.config.spring;
 
 import com.alibaba.dubbo.config.annotation.Service;
+
 import org.junit.Assert;
 import org.junit.Test;
 
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/action/DemoActionByAnnotation.java b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/action/DemoActionByAnnotation.java
index 8c66286..6e0964f 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/action/DemoActionByAnnotation.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/action/DemoActionByAnnotation.java
@@ -17,6 +17,7 @@
 package com.alibaba.dubbo.config.spring.action;
 
 import com.alibaba.dubbo.config.spring.api.DemoService;
+
 import org.springframework.beans.factory.annotation.Autowired;
 
 /**
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/annotation/consumer/AnnotationAction.java b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/annotation/consumer/AnnotationAction.java
index 37700a0..be7c3df 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/annotation/consumer/AnnotationAction.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/annotation/consumer/AnnotationAction.java
@@ -18,6 +18,7 @@ package com.alibaba.dubbo.config.spring.annotation.consumer;
 
 import com.alibaba.dubbo.config.annotation.Reference;
 import com.alibaba.dubbo.config.spring.api.DemoService;
+
 import org.springframework.stereotype.Controller;
 
 /**
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/AnnotationPropertyValuesAdapterTest.java b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/AnnotationPropertyValuesAdapterTest.java
index 0eb969d..01c5ee6 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/AnnotationPropertyValuesAdapterTest.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/AnnotationPropertyValuesAdapterTest.java
@@ -21,6 +21,7 @@ import com.alibaba.dubbo.common.utils.CollectionUtils;
 import com.alibaba.dubbo.config.annotation.Reference;
 import com.alibaba.dubbo.config.spring.ReferenceBean;
 import com.alibaba.dubbo.config.spring.api.DemoService;
+
 import org.junit.Assert;
 import org.junit.Test;
 import org.springframework.core.annotation.AnnotationUtils;
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/DubboConfigBindingBeanPostProcessorTest.java b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/DubboConfigBindingBeanPostProcessorTest.java
index 05a4980..b98364b 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/DubboConfigBindingBeanPostProcessorTest.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/DubboConfigBindingBeanPostProcessorTest.java
@@ -19,6 +19,7 @@ package com.alibaba.dubbo.config.spring.beans.factory.annotation;
 import com.alibaba.dubbo.config.ApplicationConfig;
 import com.alibaba.dubbo.config.spring.context.properties.DefaultDubboConfigBinder;
 import com.alibaba.dubbo.config.spring.context.properties.DubboConfigBinder;
+
 import org.junit.Assert;
 import org.junit.Test;
 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/ReferenceAnnotationBeanPostProcessorTest.java b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/ReferenceAnnotationBeanPostProcessorTest.java
index eba43b2..a48a85e 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/ReferenceAnnotationBeanPostProcessorTest.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/ReferenceAnnotationBeanPostProcessorTest.java
@@ -19,6 +19,7 @@ package com.alibaba.dubbo.config.spring.beans.factory.annotation;
 import com.alibaba.dubbo.config.annotation.Reference;
 import com.alibaba.dubbo.config.spring.ReferenceBean;
 import com.alibaba.dubbo.config.spring.api.DemoService;
+
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -35,8 +36,6 @@ import java.util.Collection;
 import java.util.Map;
 
 import static com.alibaba.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor.BEAN_NAME;
-import static org.hamcrest.CoreMatchers.*;
-import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * {@link ReferenceAnnotationBeanPostProcessor} Test
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 6133c48..22b1f56 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
@@ -18,6 +18,7 @@ package com.alibaba.dubbo.config.spring.beans.factory.annotation;
 
 import com.alibaba.dubbo.config.spring.ServiceBean;
 import com.alibaba.dubbo.config.spring.api.HelloService;
+
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/ServiceAnnotationTestConfiguration.java b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/ServiceAnnotationTestConfiguration.java
index 2e20797f..58d5217 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/ServiceAnnotationTestConfiguration.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/ServiceAnnotationTestConfiguration.java
@@ -20,6 +20,7 @@ import com.alibaba.dubbo.config.ApplicationConfig;
 import com.alibaba.dubbo.config.ProtocolConfig;
 import com.alibaba.dubbo.config.RegistryConfig;
 import com.alibaba.dubbo.config.annotation.Service;
+
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Primary;
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/ServiceBeanNameBuilderTest.java b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/ServiceBeanNameBuilderTest.java
index 8ee0c4b..84451bc 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/ServiceBeanNameBuilderTest.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/beans/factory/annotation/ServiceBeanNameBuilderTest.java
@@ -19,6 +19,7 @@ package com.alibaba.dubbo.config.spring.beans.factory.annotation;
 import com.alibaba.dubbo.config.annotation.Reference;
 import com.alibaba.dubbo.config.annotation.Service;
 import com.alibaba.dubbo.config.spring.api.DemoService;
+
 import org.junit.Assert;
 import org.junit.Test;
 import org.springframework.core.annotation.AnnotationUtils;
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/beans/factory/config/YamlPropertySourceFactory.java b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/beans/factory/config/YamlPropertySourceFactory.java
new file mode 100644
index 0000000..5b8412f
--- /dev/null
+++ b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/beans/factory/config/YamlPropertySourceFactory.java
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.alibaba.dubbo.config.spring.beans.factory.config;
+
+import org.springframework.beans.factory.config.YamlProcessor;
+import org.springframework.core.env.MapPropertySource;
+import org.springframework.core.env.PropertySource;
+import org.springframework.core.io.support.EncodedResource;
+import org.springframework.core.io.support.PropertySourceFactory;
+import org.yaml.snakeyaml.DumperOptions;
+import org.yaml.snakeyaml.Yaml;
+import org.yaml.snakeyaml.nodes.Tag;
+import org.yaml.snakeyaml.representer.Representer;
+import org.yaml.snakeyaml.resolver.Resolver;
+
+import java.io.IOException;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Properties;
+import java.util.regex.Pattern;
+
+/**
+ * YAML {@link PropertySourceFactory} implementation, some source code is copied Spring Boot
+ * org.springframework.boot.env.YamlPropertySourceLoader , see {@link #createYaml()} and {@link #process()}
+ *
+ * @since 2.6.5
+ */
+public class YamlPropertySourceFactory extends YamlProcessor implements PropertySourceFactory {
+
+    @Override
+    public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {
+        setResources(resource.getResource());
+        return new MapPropertySource(name, process());
+    }
+
+    @Override
+    protected Yaml createYaml() {
+        return new Yaml(new StrictMapAppenderConstructor(), new Representer(),
+                new DumperOptions(), new Resolver() {
+            @Override
+            public void addImplicitResolver(Tag tag, Pattern regexp,
+                                            String first) {
+                if (tag == Tag.TIMESTAMP) {
+                    return;
+                }
+                super.addImplicitResolver(tag, regexp, first);
+            }
+        });
+    }
+
+    public Map<String, Object> process() {
+        final Map<String, Object> result = new LinkedHashMap<String, Object>();
+        process(new MatchCallback() {
+            @Override
+            public void process(Properties properties, Map<String, Object> map) {
+                result.putAll(getFlattenedMap(map));
+            }
+        });
+        return result;
+    }
+
+}
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/beans/factory/config/YamlPropertySourceFactoryTest.java b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/beans/factory/config/YamlPropertySourceFactoryTest.java
new file mode 100644
index 0000000..91042cd
--- /dev/null
+++ b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/beans/factory/config/YamlPropertySourceFactoryTest.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.alibaba.dubbo.config.spring.beans.factory.config;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.core.env.Environment;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringRunner;
+
+/**
+ * {@link YamlPropertySourceFactory} Test
+ *
+ * @since 2.6.5
+ */
+@RunWith(SpringRunner.class)
+@PropertySource(name = "yaml-source", value = {"classpath:/META-INF/dubbo.yml"}, factory = YamlPropertySourceFactory.class)
+@Configuration
+@ContextConfiguration(classes = YamlPropertySourceFactoryTest.class)
+public class YamlPropertySourceFactoryTest {
+
+    @Autowired
+    private Environment environment;
+
+    @Value("${dubbo.consumer.default}")
+    private Boolean isDefault;
+
+    @Value("${dubbo.consumer.client}")
+    private String client;
+
+    @Value("${dubbo.consumer.threadpool}")
+    private String threadPool;
+
+    @Value("${dubbo.consumer.corethreads}")
+    private Integer coreThreads;
+
+    @Value("${dubbo.consumer.threads}")
+    private Integer threads;
+
+    @Value("${dubbo.consumer.queues}")
+    private Integer queues;
+
+    @Test
+    public void testProperty() {
+        Assert.assertEquals(isDefault, environment.getProperty("dubbo.consumer.default", Boolean.class));
+        Assert.assertEquals(client, environment.getProperty("dubbo.consumer.client", String.class));
+        Assert.assertEquals(threadPool, environment.getProperty("dubbo.consumer.threadpool", String.class));
+        Assert.assertEquals(coreThreads, environment.getProperty("dubbo.consumer.corethreads", Integer.class));
+        Assert.assertEquals(threads, environment.getProperty("dubbo.consumer.threads", Integer.class));
+        Assert.assertEquals(queues, environment.getProperty("dubbo.consumer.queues", Integer.class));
+    }
+}
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/DubboComponentScanRegistrarTest.java b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/DubboComponentScanRegistrarTest.java
index 5b5478b..54d6c97 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/DubboComponentScanRegistrarTest.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/DubboComponentScanRegistrarTest.java
@@ -20,6 +20,7 @@ import com.alibaba.dubbo.config.spring.api.DemoService;
 import com.alibaba.dubbo.config.spring.context.annotation.consumer.ConsumerConfiguration;
 import com.alibaba.dubbo.config.spring.context.annotation.provider.DemoServiceImpl;
 import com.alibaba.dubbo.config.spring.context.annotation.provider.ProviderConfiguration;
+
 import org.junit.Assert;
 import org.junit.Test;
 import org.springframework.aop.support.AopUtils;
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/DubboConfigBindingRegistrarTest.java b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/DubboConfigBindingRegistrarTest.java
index 712789a..853df84 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/DubboConfigBindingRegistrarTest.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/DubboConfigBindingRegistrarTest.java
@@ -17,6 +17,7 @@
 package com.alibaba.dubbo.config.spring.context.annotation;
 
 import com.alibaba.dubbo.config.ApplicationConfig;
+
 import org.junit.Assert;
 import org.junit.Test;
 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/DubboConfigBindingsRegistrarTest.java b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/DubboConfigBindingsRegistrarTest.java
index c02a21d..a73dbf2 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/DubboConfigBindingsRegistrarTest.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/DubboConfigBindingsRegistrarTest.java
@@ -17,6 +17,7 @@
 package com.alibaba.dubbo.config.spring.context.annotation;
 
 import com.alibaba.dubbo.config.ApplicationConfig;
+
 import org.junit.Assert;
 import org.junit.Test;
 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/DubboConfigConfigurationTest.java b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/DubboConfigConfigurationTest.java
index 26a38f7..ff21bcd 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/DubboConfigConfigurationTest.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/DubboConfigConfigurationTest.java
@@ -20,6 +20,7 @@ import com.alibaba.dubbo.config.ApplicationConfig;
 import com.alibaba.dubbo.config.ModuleConfig;
 import com.alibaba.dubbo.config.ProtocolConfig;
 import com.alibaba.dubbo.config.RegistryConfig;
+
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/EnableDubboConfigTest.java b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/EnableDubboConfigTest.java
index 1673be1..d5c41b0 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/EnableDubboConfigTest.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/EnableDubboConfigTest.java
@@ -23,6 +23,7 @@ import com.alibaba.dubbo.config.MonitorConfig;
 import com.alibaba.dubbo.config.ProtocolConfig;
 import com.alibaba.dubbo.config.ProviderConfig;
 import com.alibaba.dubbo.config.RegistryConfig;
+
 import org.junit.Assert;
 import org.junit.Test;
 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/EnableDubboTest.java b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/EnableDubboTest.java
index c5018da..e419632 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/EnableDubboTest.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/EnableDubboTest.java
@@ -21,6 +21,7 @@ import com.alibaba.dubbo.config.RegistryConfig;
 import com.alibaba.dubbo.config.spring.api.DemoService;
 import com.alibaba.dubbo.config.spring.context.annotation.consumer.test.TestConsumerConfiguration;
 import com.alibaba.dubbo.config.spring.context.annotation.provider.DemoServiceImpl;
+
 import org.junit.Assert;
 import org.junit.Test;
 import org.springframework.aop.support.AopUtils;
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/consumer/ConsumerConfiguration.java b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/consumer/ConsumerConfiguration.java
index 3e6b463..cf903ca 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/consumer/ConsumerConfiguration.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/consumer/ConsumerConfiguration.java
@@ -21,6 +21,7 @@ import com.alibaba.dubbo.config.RegistryConfig;
 import com.alibaba.dubbo.config.annotation.Reference;
 import com.alibaba.dubbo.config.spring.api.DemoService;
 import com.alibaba.dubbo.config.spring.context.annotation.DubboComponentScan;
+
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.PropertySource;
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/consumer/test/TestConsumerConfiguration.java b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/consumer/test/TestConsumerConfiguration.java
index 4edf2fc..a345c1b 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/consumer/test/TestConsumerConfiguration.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/consumer/test/TestConsumerConfiguration.java
@@ -19,6 +19,7 @@ package com.alibaba.dubbo.config.spring.context.annotation.consumer.test;
 import com.alibaba.dubbo.config.annotation.Reference;
 import com.alibaba.dubbo.config.spring.api.DemoService;
 import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
+
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.PropertySource;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
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 fd70e82..5b5f894 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
@@ -17,6 +17,7 @@
 package com.alibaba.dubbo.config.spring.context.annotation.provider;
 
 import com.alibaba.dubbo.config.spring.api.HelloService;
+
 import org.springframework.stereotype.Service;
 
 /**
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/provider/DemoServiceImpl.java b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/provider/DemoServiceImpl.java
index 9961aa2..2641fae 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/provider/DemoServiceImpl.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/provider/DemoServiceImpl.java
@@ -18,6 +18,7 @@ package com.alibaba.dubbo.config.spring.context.annotation.provider;
 
 import com.alibaba.dubbo.config.spring.api.Box;
 import com.alibaba.dubbo.config.spring.api.DemoService;
+
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/provider/ProviderConfiguration.java b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/provider/ProviderConfiguration.java
index ef2eeca..afa6e0f 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/provider/ProviderConfiguration.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/annotation/provider/ProviderConfiguration.java
@@ -20,6 +20,7 @@ import com.alibaba.dubbo.config.ApplicationConfig;
 import com.alibaba.dubbo.config.ProtocolConfig;
 import com.alibaba.dubbo.config.RegistryConfig;
 import com.alibaba.dubbo.config.spring.context.annotation.DubboComponentScan;
+
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Primary;
 import org.springframework.context.annotation.PropertySource;
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/properties/DefaultDubboConfigBinderTest.java b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/properties/DefaultDubboConfigBinderTest.java
index f0ec69f..9fe8be3 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/properties/DefaultDubboConfigBinderTest.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/context/properties/DefaultDubboConfigBinderTest.java
@@ -18,24 +18,50 @@ package com.alibaba.dubbo.config.spring.context.properties;
 
 
 import com.alibaba.dubbo.config.ApplicationConfig;
+import com.alibaba.dubbo.config.ConsumerConfig;
 import com.alibaba.dubbo.config.ProtocolConfig;
 import com.alibaba.dubbo.config.RegistryConfig;
+import com.alibaba.dubbo.config.spring.beans.factory.config.YamlPropertySourceFactory;
+
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.PropertySource;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.TestPropertySource;
 import org.springframework.test.context.junit4.SpringRunner;
 
 @RunWith(SpringRunner.class)
 @TestPropertySource(locations = "classpath:/dubbo.properties")
-@ContextConfiguration(classes = DefaultDubboConfigBinder.class)
+@PropertySource(name = "yaml-source", value = {"classpath:/META-INF/dubbo.yml"}, factory = YamlPropertySourceFactory.class)
+@Configuration
+@ContextConfiguration(classes = {DefaultDubboConfigBinder.class, DefaultDubboConfigBinderTest.class})
 public class DefaultDubboConfigBinderTest {
 
     @Autowired
     private DubboConfigBinder dubboConfigBinder;
 
+    @Value("${dubbo.consumer.default}")
+    private Boolean isDefault;
+
+    @Value("${dubbo.consumer.client}")
+    private String client;
+
+    @Value("${dubbo.consumer.threadpool}")
+    private String threadPool;
+
+    @Value("${dubbo.consumer.corethreads}")
+    private Integer coreThreads;
+
+    @Value("${dubbo.consumer.threads}")
+    private Integer threads;
+
+    @Value("${dubbo.consumer.queues}")
+    private Integer queues;
+
     @Test
     public void testBinder() {
 
@@ -52,5 +78,15 @@ public class DefaultDubboConfigBinderTest {
         dubboConfigBinder.bind("dubbo.protocol", protocolConfig);
         Assert.assertEquals(Integer.valueOf(20881), protocolConfig.getPort());
 
+        ConsumerConfig consumerConfig = new ConsumerConfig();
+        dubboConfigBinder.bind("dubbo.consumer", consumerConfig);
+
+        Assert.assertEquals(isDefault, consumerConfig.isDefault());
+        Assert.assertEquals(client, consumerConfig.getClient());
+        Assert.assertEquals(threadPool, consumerConfig.getThreadpool());
+        Assert.assertEquals(coreThreads, consumerConfig.getCorethreads());
+        Assert.assertEquals(threads, consumerConfig.getThreads());
+        Assert.assertEquals(queues, consumerConfig.getQueues());
     }
 }
+
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/schema/DubboNamespaceHandlerTest.java b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/schema/DubboNamespaceHandlerTest.java
index 7b86652..7c7ddb0 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/schema/DubboNamespaceHandlerTest.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/schema/DubboNamespaceHandlerTest.java
@@ -25,6 +25,7 @@ import com.alibaba.dubbo.config.spring.ConfigTest;
 import com.alibaba.dubbo.config.spring.ServiceBean;
 import com.alibaba.dubbo.config.spring.api.DemoService;
 import com.alibaba.dubbo.config.spring.impl.DemoServiceImpl;
+
 import org.junit.Test;
 import org.springframework.beans.factory.BeanCreationException;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/status/DataSourceStatusCheckerTest.java b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/status/DataSourceStatusCheckerTest.java
index 27ef380..178f32c 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/status/DataSourceStatusCheckerTest.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/status/DataSourceStatusCheckerTest.java
@@ -18,6 +18,7 @@ package com.alibaba.dubbo.config.spring.status;
 
 import com.alibaba.dubbo.common.status.Status;
 import com.alibaba.dubbo.config.spring.ServiceBean;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Answers;
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/status/SpringStatusCheckerTest.java b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/status/SpringStatusCheckerTest.java
index 1a57925..39f9125 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/status/SpringStatusCheckerTest.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/status/SpringStatusCheckerTest.java
@@ -18,6 +18,7 @@ package com.alibaba.dubbo.config.spring.status;
 
 import com.alibaba.dubbo.common.status.Status;
 import com.alibaba.dubbo.config.spring.ServiceBean;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/util/BeanFactoryUtilsTest.java b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/util/BeanFactoryUtilsTest.java
deleted file mode 100644
index 70b013b..0000000
--- a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/util/BeanFactoryUtilsTest.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.alibaba.dubbo.config.spring.util;
-
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-import org.springframework.context.annotation.AnnotationConfigApplicationContext;
-import org.springframework.stereotype.Component;
-
-import java.util.List;
-
-/**
- * {@link BeanFactoryUtils} Test
- *
- * @since 2.5.7
- */
-public class BeanFactoryUtilsTest {
-
-    private AnnotationConfigApplicationContext applicationContext;
-
-    @Before
-    public void init() {
-        applicationContext = new AnnotationConfigApplicationContext();
-    }
-
-    @Test
-    public void testGetOptionalBean() {
-
-        applicationContext.register(TestBean.class);
-
-        applicationContext.refresh();
-
-        TestBean testBean = BeanFactoryUtils.getOptionalBean(applicationContext, "testBean", TestBean.class);
-
-        Assert.assertNotNull(testBean);
-
-        Assert.assertEquals("Hello,World", testBean.getName());
-
-    }
-
-    @Test
-    public void testGetOptionalBeanIfAbsent() {
-
-        applicationContext.refresh();
-
-        TestBean testBean = BeanFactoryUtils.getOptionalBean(applicationContext, "testBean", TestBean.class);
-
-        Assert.assertNull(testBean);
-    }
-
-    @Test
-    public void testGetBeans() {
-
-        applicationContext.register(TestBean.class, TestBean2.class);
-
-        applicationContext.refresh();
-
-        List<TestBean> testBeans = BeanFactoryUtils.getBeans(applicationContext, new String[]{"testBean"}, TestBean.class);
-
-        Assert.assertEquals(1, testBeans.size());
-
-        Assert.assertEquals("Hello,World", testBeans.get(0).getName());
-
-    }
-
-    @Test
-    public void testGetBeansIfAbsent() {
-
-        applicationContext.refresh();
-
-        List<TestBean> testBeans = BeanFactoryUtils.getBeans(applicationContext, new String[]{"testBean"}, TestBean.class);
-
-        Assert.assertTrue(testBeans.isEmpty());
-
-    }
-
-
-    @Component("testBean2")
-    private static class TestBean2 extends TestBean {
-
-    }
-
-    @Component("testBean")
-    private static class TestBean {
-
-        private String name = "Hello,World";
-
-        public String getName() {
-            return name;
-        }
-
-        public void setName(String name) {
-            this.name = name;
-        }
-    }
-}
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/util/PropertySourcesUtilsTest.java b/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/util/PropertySourcesUtilsTest.java
deleted file mode 100644
index 5dd526f..0000000
--- a/dubbo-config/dubbo-config-spring/src/test/java/com/alibaba/dubbo/config/spring/util/PropertySourcesUtilsTest.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.alibaba.dubbo.config.spring.util;
-
-import org.junit.Assert;
-import org.junit.Test;
-import org.springframework.core.env.MapPropertySource;
-import org.springframework.core.env.MutablePropertySources;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * {@link PropertySourcesUtils} Test
- *
- * @see PropertySourcesUtils
- * @since 2.5.8
- */
-public class PropertySourcesUtilsTest {
-
-    @Test
-    public void testGetSubProperties() {
-
-        MutablePropertySources propertySources = new MutablePropertySources();
-
-        Map<String, Object> source = new HashMap<String, Object>();
-
-        MapPropertySource propertySource = new MapPropertySource("test", source);
-
-        propertySources.addFirst(propertySource);
-
-        String KEY_PREFIX = "user";
-        String KEY_NAME = "name";
-        String KEY_AGE = "age";
-        Map<String, String> result = PropertySourcesUtils.getSubProperties(propertySources, KEY_PREFIX);
-
-        Assert.assertEquals(Collections.emptyMap(), result);
-
-        source.put(KEY_PREFIX + "." + KEY_NAME, "Mercy");
-        source.put(KEY_PREFIX + "." + KEY_AGE, 31);
-
-        Map<String, Object> expected = new HashMap<String, Object>();
-        expected.put(KEY_NAME, "Mercy");
-        expected.put(KEY_AGE, "31");
-
-        result = PropertySourcesUtils.getSubProperties(propertySources, KEY_PREFIX);
-        Assert.assertEquals(expected, result);
-
-        result = PropertySourcesUtils.getSubProperties(propertySources, "");
-
-        Assert.assertEquals(Collections.emptyMap(), result);
-
-        result = PropertySourcesUtils.getSubProperties(propertySources, "no-exists");
-
-        Assert.assertEquals(Collections.emptyMap(), result);
-
-    }
-
-}
diff --git a/dubbo-config/dubbo-config-spring/src/test/resources/META-INF/dubbb-consumer.properties b/dubbo-config/dubbo-config-spring/src/test/resources/META-INF/dubbb-consumer.properties
index ef6a32a..4e003cc 100644
--- a/dubbo-config/dubbo-config-spring/src/test/resources/META-INF/dubbb-consumer.properties
+++ b/dubbo-config/dubbo-config-spring/src/test/resources/META-INF/dubbb-consumer.properties
@@ -5,7 +5,7 @@ demo.service.registry = my-registry
 
 ## Dubbo configs binding properties
 ###  <dubbo:application name="dubbo-annotation-consumer"/>
-dubbo.applications.dubbo-annotation-consumer.name = Dubbo Consumer
+dubbo.applications.dubbo-annotation-consumer.name = dubbo-consumer
 dubbo.applications.dubbo-annotation-consumer2.name = dubbo-consumer2
 
 ### <dubbo:registry id="my-registry" address="N/A"/>
diff --git a/dubbo-config/dubbo-config-spring/src/test/resources/META-INF/dubbb-provider.properties b/dubbo-config/dubbo-config-spring/src/test/resources/META-INF/dubbb-provider.properties
index 0376ee8..61d99ba 100644
--- a/dubbo-config/dubbo-config-spring/src/test/resources/META-INF/dubbb-provider.properties
+++ b/dubbo-config/dubbo-config-spring/src/test/resources/META-INF/dubbb-provider.properties
@@ -12,7 +12,7 @@ demo.service.registry = my-registry
 
 ### <dubbo:application name="dubbo-annotation-provider"/>
 dubbo.application.id = dubbo-annotation-provider
-dubbo.application.name = Dubbo Provider
+dubbo.application.name = dubbo-provider
 
 ### <dubbo:registry id="my-registry" address="N/A"/>
 dubbo.registry.id = my-registry
diff --git a/dubbo-config/dubbo-config-spring/src/test/resources/META-INF/dubbo.yml b/dubbo-config/dubbo-config-spring/src/test/resources/META-INF/dubbo.yml
new file mode 100644
index 0000000..ed0f0dd
--- /dev/null
+++ b/dubbo-config/dubbo-config-spring/src/test/resources/META-INF/dubbo.yml
@@ -0,0 +1,8 @@
+dubbo:
+  consumer:
+    default: false
+    client: netty
+    threadpool: cached
+    corethreads: 1
+    threads: 10
+    queues: 99
\ No newline at end of file
diff --git a/dubbo-config/dubbo-config-spring/src/test/resources/dubbo.properties b/dubbo-config/dubbo-config-spring/src/test/resources/dubbo.properties
index 98b869b..6c4d999 100644
--- a/dubbo-config/dubbo-config-spring/src/test/resources/dubbo.properties
+++ b/dubbo-config/dubbo-config-spring/src/test/resources/dubbo.properties
@@ -1,4 +1,6 @@
-dubbo.application.name=hello
+name = hello
+app.name = ${name}
+dubbo.application.name=${app.name}
 dubbo.application.owner=world
 dubbo.registry.address=10.20.153.17
 dubbo.protocol.port=20881