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