Fix issue#5411 (#5427)

diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractReferenceConfig.java b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractReferenceConfig.java
index 95107b4..0e3a9e6 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractReferenceConfig.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractReferenceConfig.java
@@ -59,7 +59,7 @@
     /**
      * Lazy create connection
      */
-    protected Boolean lazy = false;
+    protected Boolean lazy;
 
     protected String reconnect;
 
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/ServiceConfigBase.java b/dubbo-common/src/main/java/org/apache/dubbo/config/ServiceConfigBase.java
index 2ab7936..f7488f6 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/config/ServiceConfigBase.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/config/ServiceConfigBase.java
@@ -462,4 +462,4 @@
 
     public abstract boolean isUnexported();
 
-}
\ No newline at end of file
+}
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/context/ConfigManager.java b/dubbo-common/src/main/java/org/apache/dubbo/config/context/ConfigManager.java
index 296e604..90de5eb 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/config/context/ConfigManager.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/config/context/ConfigManager.java
@@ -179,13 +179,17 @@
     }
 
     public Optional<ProviderConfig> getDefaultProvider() {
-        return getProvider(DEFAULT_KEY);
+        return getProvider(genDefaultId(ProviderConfig.class));
     }
 
     public Collection<ProviderConfig> getProviders() {
         return getConfigs(getTagName(ProviderConfig.class));
     }
 
+    private static String genDefaultId(Class<?> clazz) {
+        return clazz.getSimpleName() + "#" + DEFAULT_KEY;
+    }
+
     // ConsumerConfig correlative methods
 
     public void addConsumer(ConsumerConfig consumerConfig) {
@@ -201,7 +205,7 @@
     }
 
     public Optional<ConsumerConfig> getDefaultConsumer() {
-        return getConsumer(DEFAULT_KEY);
+        return getConsumer(genDefaultId(ConsumerConfig.class));
     }
 
     public Collection<ConsumerConfig> getConsumers() {
@@ -484,9 +488,20 @@
     }
 
     static <C extends AbstractConfig> String getId(C config) {
+        if ((config instanceof ProviderConfig
+            || config instanceof ConsumerConfig
+            || config instanceof ApplicationConfig
+            || config instanceof MonitorConfig
+            || config instanceof RegistryConfig
+            || config instanceof ProtocolConfig
+            || config instanceof ModuleConfig)
+            && isDefaultConfig(config)) {
+            return genDefaultId(config.getClass());
+        }
+
         String id = config.getId();
         return isNotEmpty(id) ? id : isDefaultConfig(config) ?
-                config.getClass().getSimpleName() + "#" + DEFAULT_KEY : null;
+            genDefaultId(config.getClass()) : null;
     }
 
     static <C extends AbstractConfig> boolean isDefaultConfig(C config) {
diff --git a/dubbo-common/src/test/java/org/apache/dubbo/config/context/ConfigManagerTest.java b/dubbo-common/src/test/java/org/apache/dubbo/config/context/ConfigManagerTest.java
index 2314370..e226b94 100644
--- a/dubbo-common/src/test/java/org/apache/dubbo/config/context/ConfigManagerTest.java
+++ b/dubbo-common/src/test/java/org/apache/dubbo/config/context/ConfigManagerTest.java
@@ -132,30 +132,26 @@
         Collection<ProviderConfig> configs = configManager.getProviders();
         assertEquals(1, configs.size());
         assertEquals(config, configs.iterator().next());
-        assertFalse(configManager.getDefaultProvider().isPresent());
-
-        config.setId(DEFAULT_KEY);
-        configManager.addProvider(config);
         assertTrue(configManager.getDefaultProvider().isPresent());
-        configs = configManager.getProviders();
-        assertEquals(2, configs.size());
     }
 
     // Test ConsumerConfig correlative methods
     @Test
     public void testConsumerConfig() {
-        ConsumerConfig config = new ConsumerConfig();
-        configManager.addConsumers(asList(config, null));
-        Collection<ConsumerConfig> configs = configManager.getConsumers();
-        assertEquals(1, configs.size());
-        assertEquals(config, configs.iterator().next());
-        assertFalse(configManager.getDefaultConsumer().isPresent());
+        ConsumerConfig configDefault = new ConsumerConfig();
+        configDefault.setDefault(true);
+        configDefault.setId("default-id");
 
-        config.setId(DEFAULT_KEY);
-        configManager.addConsumer(config);
-        assertTrue(configManager.getDefaultConsumer().isPresent());
-        configs = configManager.getConsumers();
+        ConsumerConfig config = new ConsumerConfig();
+        config.setDefault(false);
+        config.setId("my-id");
+
+        configManager.addConsumers(asList(configDefault, config));
+
+        Collection<ConsumerConfig> configs = configManager.getConsumers();
         assertEquals(2, configs.size());
+        assertTrue(configManager.getDefaultConsumer().isPresent());
+        assertEquals("default-id", configManager.getDefaultConsumer().get().getId());
     }
 
     // Test ProtocolConfig correlative methods
diff --git a/dubbo-config/dubbo-config-spring/src/test/resources/org/apache/dubbo/config/spring/demo-provider.xml b/dubbo-config/dubbo-config-spring/src/test/resources/org/apache/dubbo/config/spring/demo-provider.xml
index 0105571..58e0f8b 100644
--- a/dubbo-config/dubbo-config-spring/src/test/resources/org/apache/dubbo/config/spring/demo-provider.xml
+++ b/dubbo-config/dubbo-config-spring/src/test/resources/org/apache/dubbo/config/spring/demo-provider.xml
@@ -34,4 +34,4 @@
 
     <bean id="demoService" class="org.apache.dubbo.config.spring.impl.DemoServiceImpl"/>
 
-</beans>
\ No newline at end of file
+</beans>