diff --git 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
index 4b30bfe101..f19d4e1f25 100644
--- 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
+++ 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
@@ -44,13 +44,7 @@
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
+import java.util.*;
 
 import static org.apache.dubbo.common.utils.NetUtils.isInvalidLocalHost;
 
@@ -105,7 +99,7 @@
      * The interface class of the reference service
      */
     private Class<?> interfaceClass;
-    
+
     /**
      * client type
      */
@@ -116,6 +110,11 @@
      */
     private String url;
 
+    /**
+     * The classloader for load interface
+     */
+    private ClassLoader classLoader;
+
     /**
      * The method configs
      */
@@ -204,8 +203,7 @@ public void checkAndUpdateSubConfigs() {
             interfaceClass = GenericService.class;
         } else {
             try {
-                interfaceClass = Class.forName(interfaceName, true, 
Thread.currentThread()
-                        .getContextClassLoader());
+                interfaceClass = Class.forName(interfaceName, true, 
classLoader());
             } catch (ClassNotFoundException e) {
                 throw new IllegalStateException(e.getMessage(), e);
             }
@@ -226,6 +224,14 @@ public void checkAndUpdateSubConfigs() {
         checkRegistryDataConfig();
     }
 
+    private ClassLoader classLoader() {
+        return Objects.isNull(classLoader) ? 
Thread.currentThread().getContextClassLoader() : this.classLoader;
+    }
+
+    private void setClassLoader(ClassLoader classLoader) {
+        this.classLoader = classLoader;
+    }
+
     public synchronized T get() {
         checkAndUpdateSubConfigs();
 


With regards,
Apache Git Services

Reply via email to