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