diff --git a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ConsumerModel.java b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ConsumerModel.java
index 72892d5..24876bc 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ConsumerModel.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ConsumerModel.java
@@ -17,7 +17,6 @@
 package org.apache.dubbo.rpc.model;
 
 import org.apache.dubbo.common.utils.Assert;
-import org.apache.dubbo.config.ReferenceConfigBase;
 
 import java.lang.reflect.Method;
 import java.util.ArrayList;
@@ -49,11 +48,11 @@
      */
     public ConsumerModel(String serviceKey,
                          Object proxyObject,
-                         ServiceDescriptor serviceModel,
-                         ReferenceConfigBase<?> referenceConfig,
-                         Map<String, AsyncMethodInfo> methodConfigs) {
+                         ServiceDescriptor serviceDescriptor,
+                         Map<String, AsyncMethodInfo> methodConfigs,
+                         ClassLoader interfaceClassLoader) {
 
-        super(proxyObject, serviceKey, serviceModel, referenceConfig);
+        super(proxyObject, serviceKey, serviceDescriptor, null, interfaceClassLoader);
         Assert.notEmptyString(serviceKey, "Service name can't be null or blank");
 
         this.methodConfigs = methodConfigs == null ? new HashMap<>() : methodConfigs;
@@ -61,12 +60,12 @@
 
     public ConsumerModel(String serviceKey,
                          Object proxyObject,
-                         ServiceDescriptor serviceModel,
-                         ReferenceConfigBase<?> referenceConfig,
+                         ServiceDescriptor serviceDescriptor,
                          ServiceMetadata metadata,
-                         Map<String, AsyncMethodInfo> methodConfigs) {
+                         Map<String, AsyncMethodInfo> methodConfigs,
+                         ClassLoader interfaceClassLoader) {
 
-        super(proxyObject, serviceKey, serviceModel, referenceConfig, metadata);
+        super(proxyObject, serviceKey, serviceDescriptor, null, metadata, interfaceClassLoader);
         Assert.notEmptyString(serviceKey, "Service name can't be null or blank");
 
         this.methodConfigs = methodConfigs == null ? new HashMap<>() : methodConfigs;
@@ -74,13 +73,13 @@
 
     public ConsumerModel(String serviceKey,
                          Object proxyObject,
-                         ServiceDescriptor serviceModel,
-                         ReferenceConfigBase<?> referenceConfig,
+                         ServiceDescriptor serviceDescriptor,
                          ModuleModel moduleModel,
                          ServiceMetadata metadata,
-                         Map<String, AsyncMethodInfo> methodConfigs) {
+                         Map<String, AsyncMethodInfo> methodConfigs,
+                         ClassLoader interfaceClassLoader) {
+        super(proxyObject, serviceKey, serviceDescriptor, moduleModel, metadata, interfaceClassLoader);
 
-        super(proxyObject, serviceKey, serviceModel, referenceConfig, moduleModel, metadata);
         Assert.notEmptyString(serviceKey, "Service name can't be null or blank");
 
         this.methodConfigs = methodConfigs == null ? new HashMap<>() : methodConfigs;
@@ -101,7 +100,7 @@
     public void initMethodModels() {
         Class<?>[] interfaceList;
         if (getProxyObject() == null) {
-            Class<?> serviceInterfaceClass = getReferenceConfig().getServiceInterfaceClass();
+            Class<?> serviceInterfaceClass = getServiceInterfaceClass();
             if (serviceInterfaceClass != null) {
                 interfaceList = new Class[]{serviceInterfaceClass};
             } else {
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ModuleModel.java b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ModuleModel.java
index 89929a9..ce8df35 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ModuleModel.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ModuleModel.java
@@ -27,6 +27,7 @@
 import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
 import org.apache.dubbo.common.utils.Assert;
+import org.apache.dubbo.common.utils.ClassUtils;
 import org.apache.dubbo.config.context.ModuleConfigManager;
 
 import java.util.HashMap;
@@ -183,13 +184,13 @@
         serviceMetadata.setDefaultGroup(url.getGroup());
         serviceMetadata.setServiceInterfaceName(internalService.getName());
         serviceMetadata.setServiceType(internalService);
-        String servyceKey = URL.buildKey(internalService.getName(), url.getGroup(), url.getVersion());
-        serviceMetadata.setServiceKey(servyceKey);
+        String serviceKey = URL.buildKey(internalService.getName(), url.getGroup(), url.getVersion());
+        serviceMetadata.setServiceKey(serviceKey);
 
-        ConsumerModel consumerModel = new ConsumerModel(serviceMetadata.getServiceKey(), "jdk", serviceRepository.lookupService(serviceMetadata.getServiceInterfaceName()), null,
-            this, serviceMetadata, new HashMap<>());
+        ConsumerModel consumerModel = new ConsumerModel(serviceMetadata.getServiceKey(), "jdk", serviceRepository.lookupService(serviceMetadata.getServiceInterfaceName()),
+            this, serviceMetadata, new HashMap<>(0), ClassUtils.getClassLoader(internalService));
 
-        logger.info("Dynamically registering consumer model " + servyceKey + " into model " + this.getDesc());
+        logger.info("Dynamically registering consumer model " + serviceKey + " into model " + this.getDesc());
         serviceRepository.registerConsumer(consumerModel);
         return consumerModel;
     }
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ModuleServiceRepository.java b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ModuleServiceRepository.java
index 5a24a0b..748b21d 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ModuleServiceRepository.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ModuleServiceRepository.java
@@ -71,8 +71,12 @@
                                  ReferenceConfigBase<?> rc,
                                  Object proxy,
                                  ServiceMetadata serviceMetadata) {
-        ConsumerModel consumerModel = new ConsumerModel(serviceMetadata.getServiceKey(), proxy, serviceDescriptor, rc,
-            serviceMetadata, null);
+        ClassLoader classLoader = null;
+        if (rc != null) {
+            classLoader = rc.getInterfaceClassLoader();
+        }
+        ConsumerModel consumerModel = new ConsumerModel(serviceMetadata.getServiceKey(), proxy, serviceDescriptor,
+            serviceMetadata, null, classLoader);
         this.registerConsumer(consumerModel);
     }
 
@@ -89,8 +93,14 @@
                                  ServiceDescriptor serviceModel,
                                  ServiceConfigBase<?> serviceConfig,
                                  ServiceMetadata serviceMetadata) {
+        ClassLoader classLoader = null;
+        Class<?> cla = null;
+        if (serviceConfig != null) {
+            classLoader = serviceConfig.getInterfaceClassLoader();
+            cla = serviceConfig.getInterfaceClass();
+        }
         ProviderModel providerModel = new ProviderModel(serviceKey, serviceInstance, serviceModel,
-            serviceConfig, serviceMetadata);
+            serviceMetadata, classLoader);
         this.registerProvider(providerModel);
     }
 
@@ -100,14 +110,15 @@
     }
 
     public ServiceDescriptor registerService(ServiceDescriptor serviceDescriptor) {
-        return registerService(serviceDescriptor.getServiceInterfaceClass(),serviceDescriptor);
+        return registerService(serviceDescriptor.getServiceInterfaceClass(), serviceDescriptor);
     }
 
     public ServiceDescriptor registerService(Class<?> interfaceClazz) {
         ServiceDescriptor serviceDescriptor = new ReflectionServiceDescriptor(interfaceClazz);
-        return registerService(interfaceClazz,serviceDescriptor);
+        return registerService(interfaceClazz, serviceDescriptor);
     }
-    public ServiceDescriptor registerService(Class<?> interfaceClazz,ServiceDescriptor serviceDescriptor) {
+
+    public ServiceDescriptor registerService(Class<?> interfaceClazz, ServiceDescriptor serviceDescriptor) {
         List<ServiceDescriptor> serviceDescriptors = services.computeIfAbsent(interfaceClazz.getName(),
             k -> new CopyOnWriteArrayList<>());
         synchronized (serviceDescriptors) {
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ProviderModel.java b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ProviderModel.java
index a1d8772..b30a308 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ProviderModel.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ProviderModel.java
@@ -17,7 +17,6 @@
 package org.apache.dubbo.rpc.model;
 
 import org.apache.dubbo.common.URL;
-import org.apache.dubbo.config.ServiceConfigBase;
 
 import java.lang.reflect.Method;
 import java.util.ArrayList;
@@ -36,11 +35,16 @@
     private final List<RegisterStatedURL> urls;
     private final Map<String, List<ProviderMethodModel>> methods = new HashMap<>();
 
+    /**
+     * The url of the reference service
+     */
+    private List<URL> serviceUrls = new ArrayList<URL>();
+
     public ProviderModel(String serviceKey,
                          Object serviceInstance,
-                         ServiceDescriptor serviceModel,
-                         ServiceConfigBase<?> serviceConfig) {
-        super(serviceInstance, serviceKey, serviceModel, serviceConfig);
+                         ServiceDescriptor serviceDescriptor,
+                         ClassLoader interfaceClassLoader) {
+        super(serviceInstance, serviceKey, serviceDescriptor, null, interfaceClassLoader);
         if (null == serviceInstance) {
             throw new IllegalArgumentException("Service[" + serviceKey + "]Target is NULL.");
         }
@@ -50,25 +54,25 @@
 
     public ProviderModel(String serviceKey,
                          Object serviceInstance,
-                         ServiceDescriptor serviceModel,
-                         ServiceConfigBase<?> serviceConfig,
-                         ServiceMetadata serviceMetadata) {
-        super(serviceInstance, serviceKey, serviceModel, serviceConfig, serviceMetadata);
+                         ServiceDescriptor serviceDescriptor,
+                         ServiceMetadata serviceMetadata,
+                         ClassLoader interfaceClassLoader) {
+        super(serviceInstance, serviceKey, serviceDescriptor, null, serviceMetadata, interfaceClassLoader);
         if (null == serviceInstance) {
             throw new IllegalArgumentException("Service[" + serviceKey + "]Target is NULL.");
         }
 
-        initMethod(serviceModel.getServiceInterfaceClass());
+        initMethod(serviceDescriptor.getServiceInterfaceClass());
         this.urls = new ArrayList<>(1);
     }
 
     public ProviderModel(String serviceKey,
                          Object serviceInstance,
                          ServiceDescriptor serviceModel,
-                         ServiceConfigBase<?> serviceConfig,
                          ModuleModel moduleModel,
-                         ServiceMetadata serviceMetadata) {
-        super(serviceInstance, serviceKey, serviceModel, serviceConfig, moduleModel, serviceMetadata);
+                         ServiceMetadata serviceMetadata,
+                         ClassLoader interfaceClassLoader) {
+        super(serviceInstance, serviceKey, serviceModel, moduleModel, serviceMetadata, interfaceClassLoader);
         if (null == serviceInstance) {
             throw new IllegalArgumentException("Service[" + serviceKey + "]Target is NULL.");
         }
@@ -163,6 +167,15 @@
         }
     }
 
+    public List<URL> getServiceUrls() {
+        return serviceUrls;
+    }
+
+    public void setServiceUrls(List<URL> urls) {
+        this.serviceUrls = urls;
+    }
+
+
     @Override
     public boolean equals(Object o) {
         if (this == o) {
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ServiceModel.java b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ServiceModel.java
index 23bb654..16b1c8c 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ServiceModel.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ServiceModel.java
@@ -30,38 +30,81 @@
     private Object proxyObject;
     private Callable<Void> destroyCaller;
     private ClassLoader classLoader;
+
+    private final ClassLoader interfaceClassLoader;
+
     private final ModuleModel moduleModel;
     private final ServiceDescriptor serviceModel;
-    private final AbstractInterfaceConfig config;
 
-    private ServiceMetadata serviceMetadata;
+    private AbstractInterfaceConfig config;
 
-    public ServiceModel(Object proxyObject, String serviceKey, ServiceDescriptor serviceModel, AbstractInterfaceConfig config) {
-        this(proxyObject, serviceKey, serviceModel, config, null);
+    private final ServiceMetadata serviceMetadata;
+
+    public ServiceModel(Object proxyObject, String serviceKey, ServiceDescriptor serviceModel, ModuleModel moduleModel, ClassLoader interfaceClassLoader) {
+        this(proxyObject, serviceKey, serviceModel, moduleModel, null, interfaceClassLoader);
     }
 
-    public ServiceModel(Object proxyObject, String serviceKey, ServiceDescriptor serviceModel, AbstractInterfaceConfig config, ServiceMetadata serviceMetadata) {
-        this(proxyObject, serviceKey, serviceModel, config, ScopeModelUtil.getModuleModel(config != null ? config.getScopeModel() : null), serviceMetadata);
-    }
-
-    public ServiceModel(Object proxyObject, String serviceKey, ServiceDescriptor serviceModel, AbstractInterfaceConfig config, ModuleModel moduleModel, ServiceMetadata serviceMetadata) {
+    public ServiceModel(Object proxyObject, String serviceKey, ServiceDescriptor serviceModel, ModuleModel moduleModel, ServiceMetadata serviceMetadata,
+                        ClassLoader interfaceClassLoader) {
         this.proxyObject = proxyObject;
         this.serviceKey = serviceKey;
         this.serviceModel = serviceModel;
-        this.moduleModel = moduleModel;
-        this.config = config;
+        this.moduleModel = ScopeModelUtil.getModuleModel(moduleModel);
         this.serviceMetadata = serviceMetadata;
+        this.interfaceClassLoader = interfaceClassLoader;
         if (serviceMetadata != null) {
             serviceMetadata.setServiceModel(this);
         }
-        if (config != null) {
-            this.classLoader = config.getInterfaceClassLoader();
+        if (interfaceClassLoader != null) {
+            this.classLoader = interfaceClassLoader;
         }
         if (this.classLoader == null) {
             this.classLoader = Thread.currentThread().getContextClassLoader();
         }
     }
 
+    @Deprecated
+    public AbstractInterfaceConfig getConfig() {
+        return config;
+    }
+
+    @Deprecated
+    public void setConfig(AbstractInterfaceConfig config) {
+        this.config = config;
+    }
+
+    /**
+     * ServiceModel should be decoupled from AbstractInterfaceConfig and removed in a future version
+     * @return
+     */
+    @Deprecated
+    public ReferenceConfigBase<?> getReferenceConfig() {
+        if (config == null) {
+            return null;
+        }
+        if (config instanceof ReferenceConfigBase) {
+            return (ReferenceConfigBase<?>) config;
+        } else {
+            throw new IllegalArgumentException("Current ServiceModel is not a ConsumerModel");
+        }
+    }
+
+    /**
+     * ServiceModel should be decoupled from AbstractInterfaceConfig and removed in a future version
+     * @return
+     */
+    @Deprecated
+    public ServiceConfigBase<?> getServiceConfig() {
+        if (config == null) {
+            return null;
+        }
+        if (config instanceof ServiceConfigBase) {
+            return (ServiceConfigBase<?>) config;
+        } else {
+            throw new IllegalArgumentException("Current ServiceModel is not a ProviderModel");
+        }
+    }
+
     public String getServiceKey() {
         return serviceKey;
     }
@@ -99,32 +142,6 @@
         return serviceModel.getServiceInterfaceClass();
     }
 
-    public AbstractInterfaceConfig getConfig() {
-        return config;
-    }
-
-    public ReferenceConfigBase<?> getReferenceConfig() {
-        if (config == null) {
-            return null;
-        }
-        if (config instanceof ReferenceConfigBase) {
-            return (ReferenceConfigBase<?>) config;
-        } else {
-            throw new IllegalArgumentException("Current ServiceModel is not a ConsumerModel");
-        }
-    }
-
-    public ServiceConfigBase<?> getServiceConfig() {
-        if (config == null) {
-            return null;
-        }
-        if (config instanceof ServiceConfigBase) {
-            return (ServiceConfigBase<?>) config;
-        } else {
-            throw new IllegalArgumentException("Current ServiceModel is not a ProviderModel");
-        }
-    }
-
     public void setServiceKey(String serviceKey) {
         this.serviceKey = serviceKey;
         if (serviceMetadata != null) {
@@ -156,6 +173,10 @@
         this.destroyCaller = destroyCaller;
     }
 
+    public ClassLoader getInterfaceClassLoader() {
+        return interfaceClassLoader;
+    }
+
     @Override
     public boolean equals(Object o) {
         if (this == o) {
@@ -165,11 +186,11 @@
             return false;
         }
         ServiceModel that = (ServiceModel) o;
-        return Objects.equals(serviceKey, that.serviceKey) && Objects.equals(proxyObject, that.proxyObject) && Objects.equals(moduleModel, that.moduleModel) && Objects.equals(serviceModel, that.serviceModel) && Objects.equals(config, that.config) && Objects.equals(serviceMetadata, that.serviceMetadata);
+        return Objects.equals(serviceKey, that.serviceKey) && Objects.equals(proxyObject, that.proxyObject) && Objects.equals(destroyCaller, that.destroyCaller) && Objects.equals(classLoader, that.classLoader) && Objects.equals(interfaceClassLoader, that.interfaceClassLoader) && Objects.equals(moduleModel, that.moduleModel) && Objects.equals(serviceModel, that.serviceModel) && Objects.equals(serviceMetadata, that.serviceMetadata);
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(serviceKey, proxyObject, moduleModel, serviceModel, config, serviceMetadata);
+        return Objects.hash(serviceKey, proxyObject, destroyCaller, classLoader, interfaceClassLoader, moduleModel, serviceModel, serviceMetadata);
     }
 }
diff --git a/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/FrameworkServiceRepositoryTest.java b/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/FrameworkServiceRepositoryTest.java
index 3969583..03742db 100644
--- a/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/FrameworkServiceRepositoryTest.java
+++ b/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/FrameworkServiceRepositoryTest.java
@@ -17,6 +17,7 @@
 package org.apache.dubbo.rpc.model;
 
 import org.apache.dubbo.common.URL;
+import org.apache.dubbo.common.utils.ClassUtils;
 import org.apache.dubbo.common.utils.StringUtils;
 import org.apache.dubbo.rpc.support.DemoService;
 import org.apache.dubbo.rpc.support.DemoServiceImpl;
@@ -62,9 +63,8 @@
         ProviderModel providerModel = new ProviderModel(serviceKey,
             new DemoServiceImpl(),
             serviceDescriptor,
-            null,
             moduleModel,
-            serviceMetadata);
+            serviceMetadata, ClassUtils.getClassLoader(DemoService.class));
         frameworkServiceRepository.registerProvider(providerModel);
 
         ProviderModel lookupExportedService = frameworkServiceRepository.lookupExportedService(serviceKey);
@@ -89,8 +89,8 @@
         Assertions.assertEquals(urls.get(0), url);
 
         ConsumerModel consumerModel = new ConsumerModel(
-            serviceMetadata.getServiceKey(), new DemoServiceImpl(), serviceDescriptor, null,
-            moduleModel, serviceMetadata, null);
+            serviceMetadata.getServiceKey(), new DemoServiceImpl(), serviceDescriptor,
+            moduleModel, serviceMetadata, null, ClassUtils.getClassLoader(DemoService.class));
         moduleServiceRepository.registerConsumer(consumerModel);
         List<ConsumerModel> consumerModels = frameworkServiceRepository.allConsumerModels();
         Assertions.assertEquals(consumerModels.size(), 1);
diff --git a/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ModuleServiceRepositoryTest.java b/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ModuleServiceRepositoryTest.java
index ca91caa..a10bf7f 100644
--- a/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ModuleServiceRepositoryTest.java
+++ b/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ModuleServiceRepositoryTest.java
@@ -16,6 +16,7 @@
  */
 package org.apache.dubbo.rpc.model;
 
+import org.apache.dubbo.common.utils.ClassUtils;
 import org.apache.dubbo.rpc.support.DemoService;
 import org.apache.dubbo.rpc.support.DemoServiceImpl;
 
@@ -70,8 +71,8 @@
 
         // 2.test consumerModule
         ConsumerModel consumerModel = new ConsumerModel(
-            serviceMetadata.getServiceKey(), new DemoServiceImpl(), serviceDescriptor, null,
-            moduleModel, serviceMetadata, null);
+            serviceMetadata.getServiceKey(), new DemoServiceImpl(), serviceDescriptor,
+            moduleModel, serviceMetadata, null, ClassUtils.getClassLoader(DemoService.class));
         repository.registerConsumer(consumerModel);
 
         List<ConsumerModel> allReferredServices = repository.getReferredServices();
@@ -89,9 +90,8 @@
         ProviderModel providerModel = new ProviderModel(DemoService.class.getName(),
             new DemoServiceImpl(),
             serviceDescriptor,
-            null,
             moduleModel,
-            serviceMetadata);
+            serviceMetadata, ClassUtils.getClassLoader(DemoService.class));
         repository.registerProvider(providerModel);
         List<ProviderModel> allExportedServices = repository.getExportedServices();
         Assertions.assertEquals(allExportedServices.size(), 1);
diff --git a/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ServiceRepositoryTest.java b/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ServiceRepositoryTest.java
index 6daa425..a5dda91 100644
--- a/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ServiceRepositoryTest.java
+++ b/dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ServiceRepositoryTest.java
@@ -16,6 +16,7 @@
  */
 package org.apache.dubbo.rpc.model;
 
+import org.apache.dubbo.common.utils.ClassUtils;
 import org.apache.dubbo.rpc.support.DemoService;
 import org.apache.dubbo.rpc.support.DemoServiceImpl;
 
@@ -63,17 +64,16 @@
 
         // registerConsumer
         ConsumerModel consumerModel = new ConsumerModel(
-            serviceMetadata.getServiceKey(), new DemoServiceImpl(), serviceDescriptor, null,
-            moduleModel, serviceMetadata, null);
+            serviceMetadata.getServiceKey(), new DemoServiceImpl(), serviceDescriptor,
+            moduleModel, serviceMetadata, null, ClassUtils.getClassLoader(DemoService.class));
         repository.registerConsumer(consumerModel);
 
         // registerProvider
         ProviderModel providerModel = new ProviderModel(DemoService.class.getName(),
             new DemoServiceImpl(),
             serviceDescriptor,
-            null,
             moduleModel,
-            serviceMetadata);
+            serviceMetadata, ClassUtils.getClassLoader(DemoService.class));
         repository.registerProvider(providerModel);
 
         // verify allProviderModels, allConsumerModels
diff --git a/dubbo-compiler/src/main/resources/DubboGrpcStub.mustache b/dubbo-compiler/src/main/resources/DubboGrpcStub.mustache
index 9677ae0..80456bc 100644
--- a/dubbo-compiler/src/main/resources/DubboGrpcStub.mustache
+++ b/dubbo-compiler/src/main/resources/DubboGrpcStub.mustache
@@ -20,7 +20,6 @@
 {{/packageName}}
 
 import org.apache.dubbo.common.URL;
-import org.apache.dubbo.config.ReferenceConfigBase;
 
 import java.util.concurrent.TimeUnit;
 
@@ -44,15 +43,13 @@
 public static class Dubbo{{serviceName}}Stub implements I{{serviceName}} {
 
 protected URL url;
-protected ReferenceConfigBase<?> referenceConfig;
 
 protected {{serviceName}}Grpc.{{serviceName}}BlockingStub blockingStub;
 protected {{serviceName}}Grpc.{{serviceName}}FutureStub futureStub;
 protected {{serviceName}}Grpc.{{serviceName}}Stub stub;
 
-public Dubbo{{serviceName}}Stub(io.grpc.Channel channel, io.grpc.CallOptions callOptions, URL url, ReferenceConfigBase<?> referenceConfig) {
+public Dubbo{{serviceName}}Stub(io.grpc.Channel channel, io.grpc.CallOptions callOptions, URL url) {
 this.url = url;
-this.referenceConfig = referenceConfig;
 
 blockingStub = {{serviceName}}Grpc.newBlockingStub(channel).build(channel, callOptions);
 futureStub = {{serviceName}}Grpc.newFutureStub(channel).build(channel, callOptions);
@@ -120,8 +117,8 @@
 {{/biStreamingMethods}}
 }
 
-public static Dubbo{{serviceName}}Stub getDubboStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions, URL url, ReferenceConfigBase<?> referenceConfig) {
-return new Dubbo{{serviceName}}Stub(channel, callOptions, url, referenceConfig);
+public static Dubbo{{serviceName}}Stub getDubboStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions, URL url) {
+return new Dubbo{{serviceName}}Stub(channel, callOptions, url);
 }
 
 public interface I{{serviceName}} {
diff --git a/dubbo-compiler/src/main/resources/ReactorDubboGrpcStub.mustache b/dubbo-compiler/src/main/resources/ReactorDubboGrpcStub.mustache
index 07451eb..952b615 100644
--- a/dubbo-compiler/src/main/resources/ReactorDubboGrpcStub.mustache
+++ b/dubbo-compiler/src/main/resources/ReactorDubboGrpcStub.mustache
@@ -20,7 +20,6 @@
 {{/packageName}}
 
 import org.apache.dubbo.common.URL;
-import org.apache.dubbo.config.ReferenceConfigBase;
 
 import java.util.concurrent.TimeUnit;
 
@@ -40,8 +39,8 @@
 public final class {{className}} {
 private {{className}}() {}
 
-public static ReactorDubbo{{serviceName}}Stub getDubboStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions, URL url, ReferenceConfigBase<?> referenceConfig) {
-return new ReactorDubbo{{serviceName}}Stub(channel, callOptions, url, referenceConfig);
+public static ReactorDubbo{{serviceName}}Stub getDubboStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions, URL url) {
+return new ReactorDubbo{{serviceName}}Stub(channel, callOptions, url);
 }
 
 {{#javaDoc}}
@@ -50,13 +49,11 @@
 public static final class ReactorDubbo{{serviceName}}Stub implements IReactor{{serviceName}} {
 
 protected URL url;
-protected ReferenceConfigBase<?> referenceConfig;
 
 protected {{serviceName}}Grpc.{{serviceName}}Stub stub;
 
-public ReactorDubbo{{serviceName}}Stub(io.grpc.Channel channel, io.grpc.CallOptions callOptions, URL url, ReferenceConfigBase<?> referenceConfig) {
+public ReactorDubbo{{serviceName}}Stub(io.grpc.Channel channel, io.grpc.CallOptions callOptions, URL url) {
 this.url = url;
-this.referenceConfig = referenceConfig;
 stub = {{serviceName}}Grpc.newStub(channel).build(channel, callOptions);
 }
 
diff --git a/dubbo-compiler/src/main/resources/RxDubboGrpcStub.mustache b/dubbo-compiler/src/main/resources/RxDubboGrpcStub.mustache
index 3f49cc4..f27a0a2 100644
--- a/dubbo-compiler/src/main/resources/RxDubboGrpcStub.mustache
+++ b/dubbo-compiler/src/main/resources/RxDubboGrpcStub.mustache
@@ -20,7 +20,6 @@
 {{/packageName}}
 
 import org.apache.dubbo.common.URL;
-import org.apache.dubbo.config.ReferenceConfigBase;
 
 import java.util.concurrent.TimeUnit;
 
@@ -40,8 +39,8 @@
 public final class {{className}} {
 private {{className}}() {}
 
-public static RxDubbo{{serviceName}}Stub getDubboStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions, URL url, ReferenceConfigBase<?> referenceConfig) {
-return new RxDubbo{{serviceName}}Stub(channel, callOptions, url, referenceConfig);
+public static RxDubbo{{serviceName}}Stub getDubboStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions, URL url) {
+return new RxDubbo{{serviceName}}Stub(channel, callOptions, url);
 }
 
 {{#javaDoc}}
@@ -50,13 +49,11 @@
 public static final class RxDubbo{{serviceName}}Stub implements IRx{{serviceName}} {
 
 protected URL url;
-protected ReferenceConfigBase<?> referenceConfig;
 
 protected {{serviceName}}Grpc.{{serviceName}}Stub stub;
 
-public RxDubbo{{serviceName}}Stub(io.grpc.Channel channel, io.grpc.CallOptions callOptions, URL url, ReferenceConfigBase<?> referenceConfig) {
+public RxDubbo{{serviceName}}Stub(io.grpc.Channel channel, io.grpc.CallOptions callOptions, URL url) {
 this.url = url;
-this.referenceConfig = referenceConfig;
 stub = {{serviceName}}Grpc.newStub(channel).build(channel, callOptions);
 }
 
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 3b1fab9..0c57145 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
@@ -60,6 +60,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.Callable;
 
 import static org.apache.dubbo.common.constants.CommonConstants.ANY_VALUE;
 import static org.apache.dubbo.common.constants.CommonConstants.CLUSTER_KEY;
@@ -274,8 +275,11 @@
             } else {
                 serviceDescriptor = repository.registerService(interfaceClass);
             }
-            consumerModel = new ConsumerModel(serviceMetadata.getServiceKey(), proxy, serviceDescriptor, this,
-                getScopeModel(), serviceMetadata, createAsyncMethodInfo());
+            consumerModel = new ConsumerModel(serviceMetadata.getServiceKey(), proxy, serviceDescriptor,
+                getScopeModel(), serviceMetadata, createAsyncMethodInfo(), interfaceClassLoader);
+
+            // Compatible with dependencies on ServiceModel#getReferenceConfig() , and will be removed in a future version.
+            consumerModel.setConfig(this);
 
             repository.registerConsumer(consumerModel);
 
@@ -286,6 +290,7 @@
             serviceMetadata.setTarget(ref);
             serviceMetadata.addAttribute(PROXY_CLASS_REF, ref);
 
+            consumerModel.setDestroyCaller(getDestroyRunner());
             consumerModel.setProxyObject(ref);
             consumerModel.initMethodModels();
 
@@ -670,4 +675,11 @@
     public Invoker<?> getInvoker() {
         return invoker;
     }
+
+    public Callable<Void> getDestroyRunner() {
+        return () -> {
+            this.destroy();
+            return null;
+        };
+    }
 }
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
index 7123818..2238b86 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
@@ -56,6 +56,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
+import java.util.concurrent.Callable;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 
@@ -277,7 +278,7 @@
 
         // init some null configuration.
         List<ConfigInitializer> configInitializers = this.getExtensionLoader(ConfigInitializer.class)
-                .getActivateExtension(URL.valueOf("configInitializer://", getScopeModel()), (String[]) null);
+            .getActivateExtension(URL.valueOf("configInitializer://", getScopeModel()), (String[]) null);
         configInitializers.forEach(e -> e.initServiceConfig(this));
 
         // if protocol is not injvm checkRegistry
@@ -367,34 +368,39 @@
         ModuleServiceRepository repository = getScopeModel().getServiceRepository();
         ServiceDescriptor serviceDescriptor;
         final boolean serverService = ref instanceof ServerService;
-        if(serverService){
-            serviceDescriptor=((ServerService) ref).getServiceDescriptor();
+        if (serverService) {
+            serviceDescriptor = ((ServerService) ref).getServiceDescriptor();
             repository.registerService(serviceDescriptor);
-        }else{
+        } else {
             serviceDescriptor = repository.registerService(getInterfaceClass());
         }
         providerModel = new ProviderModel(getUniqueServiceName(),
             ref,
             serviceDescriptor,
-            this,
             getScopeModel(),
-            serviceMetadata);
+            serviceMetadata, interfaceClassLoader);
 
+        // Compatible with dependencies on ServiceModel#getServiceConfig(), and will be removed in a future version
+        providerModel.setConfig(this);
+
+        providerModel.setDestroyCaller(getDestroyRunner());
         repository.registerProvider(providerModel);
 
         List<URL> registryURLs = ConfigValidationUtils.loadRegistries(this, true);
 
         for (ProtocolConfig protocolConfig : protocols) {
             String pathKey = URL.buildKey(getContextPath(protocolConfig)
-                    .map(p -> p + "/" + path)
-                    .orElse(path), group, version);
+                .map(p -> p + "/" + path)
+                .orElse(path), group, version);
             // stub service will use generated service name
-            if(!serverService) {
+            if (!serverService) {
                 // In case user specified path, register service one more time to map it to path.
                 repository.registerService(pathKey, interfaceClass);
             }
             doExportUrlsFor1Protocol(protocolConfig, registryURLs);
         }
+
+        providerModel.setServiceUrls(urls);
     }
 
     private void doExportUrlsFor1Protocol(ProtocolConfig protocolConfig, List<URL> registryURLs) {
@@ -464,7 +470,7 @@
             }
         }
 
-        if(ref instanceof ServerService){
+        if (ref instanceof ServerService) {
             map.put(PROXY_KEY, CommonConstants.NATIVE_STUB);
         }
 
@@ -554,9 +560,9 @@
 
         // You can customize Configurator to append extra parameters
         if (this.getExtensionLoader(ConfiguratorFactory.class)
-                .hasExtension(url.getProtocol())) {
+            .hasExtension(url.getProtocol())) {
             url = this.getExtensionLoader(ConfiguratorFactory.class)
-                    .getExtension(url.getProtocol()).getConfigurator(url).configure(url);
+                .getExtension(url.getProtocol()).getConfigurator(url).configure(url);
         }
         url = url.setScopeModel(getScopeModel());
         url = url.setServiceModel(providerModel);
@@ -648,10 +654,10 @@
      */
     private void exportLocal(URL url) {
         URL local = URLBuilder.from(url)
-                .setProtocol(LOCAL_PROTOCOL)
-                .setHost(LOCALHOST_VALUE)
-                .setPort(0)
-                .build();
+            .setProtocol(LOCAL_PROTOCOL)
+            .setHost(LOCALHOST_VALUE)
+            .setPort(0)
+            .build();
         local = local.setScopeModel(getScopeModel())
             .setServiceModel(providerModel);
         doExportUrl(local, false);
@@ -665,12 +671,12 @@
      */
     private boolean isOnlyInJvm() {
         return getProtocols().size() == 1
-                && LOCAL_PROTOCOL.equalsIgnoreCase(getProtocols().get(0).getName());
+            && LOCAL_PROTOCOL.equalsIgnoreCase(getProtocols().get(0).getName());
     }
 
     private void postProcessConfig() {
         List<ConfigPostProcessor> configPostProcessors = this.getExtensionLoader(ConfigPostProcessor.class)
-                .getActivateExtension(URL.valueOf("configPostProcessor://", getScopeModel()), (String[]) null);
+            .getActivateExtension(URL.valueOf("configPostProcessor://", getScopeModel()), (String[]) null);
         configPostProcessors.forEach(component -> component.postProcessServiceConfig(this));
     }
 
@@ -753,7 +759,7 @@
     private static synchronized Integer findConfiguredPort(ProtocolConfig protocolConfig,
                                                            ProviderConfig provider,
                                                            ExtensionLoader<Protocol> extensionLoader,
-                                                           String name,Map<String, String> map) {
+                                                           String name, Map<String, String> map) {
         Integer portToBind;
 
         // parse bind port from environment
@@ -830,4 +836,10 @@
         }
     }
 
+    public Callable<Void> getDestroyRunner() {
+        return () -> {
+            this.unexport();
+            return null;
+        };
+    }
 }
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultModuleDeployer.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultModuleDeployer.java
index ec9c489..d81e5b3 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultModuleDeployer.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultModuleDeployer.java
@@ -213,9 +213,7 @@
 
             for (ConsumerModel consumerModel : consumerModels) {
                 try {
-                    if (consumerModel.getReferenceConfig() != null) {
-                        consumerModel.getReferenceConfig().destroy();
-                    } else if (consumerModel.getDestroyCaller() != null) {
+                    if (consumerModel.getDestroyCaller() != null) {
                         consumerModel.getDestroyCaller().call();
                     }
                 } catch (Throwable t) {
@@ -226,9 +224,7 @@
             List<ProviderModel> exportedServices = serviceRepository.getExportedServices();
             for (ProviderModel providerModel : exportedServices) {
                 try {
-                    if (providerModel.getServiceConfig() != null) {
-                        providerModel.getServiceConfig().unexport();
-                    } else if (providerModel.getDestroyCaller() != null) {
+                    if (providerModel.getDestroyCaller() != null) {
                         providerModel.getDestroyCaller().call();
                     }
                 } catch (Throwable t) {
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/MetadataServiceURLParamsMetadataCustomizer.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/MetadataServiceURLParamsMetadataCustomizer.java
index f8f016d..6e1f677 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/MetadataServiceURLParamsMetadataCustomizer.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/MetadataServiceURLParamsMetadataCustomizer.java
@@ -62,7 +62,7 @@
         ProviderModel providerModel = serviceRepository.lookupExportedService(key);
         String metadataValue = "";
         if (providerModel != null) {
-            List<URL> metadataURLs = providerModel.getServiceConfig().getExportedUrls();
+            List<URL> metadataURLs = providerModel.getServiceUrls();
             if (CollectionUtils.isNotEmpty(metadataURLs)) {
                 metadataValue = getMetadataServiceParameter(metadataURLs.get(0));
             }
diff --git a/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/LsTest.java b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/LsTest.java
index 601f8ad..58b1a40 100644
--- a/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/LsTest.java
+++ b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/LsTest.java
@@ -16,6 +16,7 @@
  */
 package org.apache.dubbo.qos.command.impl;
 
+import org.apache.dubbo.common.utils.ClassUtils;
 import org.apache.dubbo.config.ReferenceConfig;
 import org.apache.dubbo.qos.DemoService;
 import org.apache.dubbo.qos.DemoServiceImpl;
@@ -83,7 +84,7 @@
             new DemoServiceImpl(),
             serviceDescriptor,
             null,
-            serviceMetadata);
+            serviceMetadata, ClassUtils.getClassLoader(DemoService.class));
         repository.registerProvider(providerModel);
     }
 
@@ -96,8 +97,7 @@
         Map<String, AsyncMethodInfo> methodConfigs = new HashMap<>();
         ConsumerModel consumerModel = new ConsumerModel(
             serviceMetadata.getServiceKey(), null, serviceDescriptor,
-            referenceConfig, serviceMetadata, methodConfigs
-        );
+            serviceMetadata, methodConfigs, referenceConfig.getInterfaceClassLoader());
         repository.registerConsumer(consumerModel);
     }
 }
diff --git a/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/OfflineTest.java b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/OfflineTest.java
index d4a2a27..cba896f 100644
--- a/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/OfflineTest.java
+++ b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/OfflineTest.java
@@ -17,6 +17,7 @@
 package org.apache.dubbo.qos.command.impl;
 
 import org.apache.dubbo.common.URL;
+import org.apache.dubbo.common.utils.ClassUtils;
 import org.apache.dubbo.qos.DemoService;
 import org.apache.dubbo.qos.DemoServiceImpl;
 import org.apache.dubbo.qos.command.CommandContext;
@@ -90,8 +91,7 @@
             DemoService.class.getName(),
             new DemoServiceImpl(),
             serviceDescriptor,
-            null,
-            serviceMetadata);
+            serviceMetadata, ClassUtils.getClassLoader(DemoService.class));
         registerStatedURL = new ProviderModel.RegisterStatedURL(
             URL.valueOf("dubbo://127.0.0.1:20880/" + DemoService.class.getName()),
             URL.valueOf("test://127.0.0.1:2181/" + RegistryService.class.getName()),
diff --git a/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/OnlineTest.java b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/OnlineTest.java
index b663125..189b798 100644
--- a/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/OnlineTest.java
+++ b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/OnlineTest.java
@@ -17,6 +17,7 @@
 package org.apache.dubbo.qos.command.impl;
 
 import org.apache.dubbo.common.URL;
+import org.apache.dubbo.common.utils.ClassUtils;
 import org.apache.dubbo.qos.DemoService;
 import org.apache.dubbo.qos.DemoServiceImpl;
 import org.apache.dubbo.qos.command.CommandContext;
@@ -90,8 +91,7 @@
             DemoService.class.getName(),
             new DemoServiceImpl(),
             serviceDescriptor,
-            null,
-            serviceMetadata);
+            serviceMetadata, ClassUtils.getClassLoader(DemoService.class));
         registerStatedURL = new ProviderModel.RegisterStatedURL(
             URL.valueOf("dubbo://127.0.0.1:20880/" + DemoService.class.getName()),
             URL.valueOf("test://127.0.0.1:2181/" + RegistryService.class.getName()),
diff --git a/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/util/ServiceCheckUtilsTest.java b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/util/ServiceCheckUtilsTest.java
index ab1509e..432e025 100644
--- a/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/util/ServiceCheckUtilsTest.java
+++ b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/util/ServiceCheckUtilsTest.java
@@ -18,6 +18,7 @@
 
 
 import org.apache.dubbo.common.URL;
+import org.apache.dubbo.common.utils.ClassUtils;
 import org.apache.dubbo.common.utils.NetUtils;
 import org.apache.dubbo.qos.DemoService;
 import org.apache.dubbo.qos.DemoServiceImpl;
@@ -64,8 +65,7 @@
             url.getServiceKey(),
             demoServiceImpl,
             serviceDescriptor,
-            null,
-            new ServiceMetadata());
+            new ServiceMetadata(), ClassUtils.getClassLoader(DemoService.class));
         repository.registerProvider(providerModel);
 
         String url1 = "service-discovery-registry://127.0.0.1:2181/org.apache.dubbo.registry.RegistryService?application=dubbo-demo-api-provider&dubbo=2.0.2&pid=66099&registry=zookeeper&timestamp=1654588337653";
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataUtils.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataUtils.java
index 0101aec..48fe0de 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataUtils.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataUtils.java
@@ -46,6 +46,7 @@
 
 import static org.apache.dubbo.common.constants.CommonConstants.CONSUMER_SIDE;
 import static org.apache.dubbo.common.constants.CommonConstants.PROVIDER_SIDE;
+import static org.apache.dubbo.common.constants.CommonConstants.PROXY_CLASS_REF;
 import static org.apache.dubbo.common.constants.CommonConstants.REMOTE_METADATA_STORAGE_TYPE;
 import static org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_CLUSTER_KEY;
 import static org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataUtils.METADATA_SERVICE_URLS_PROPERTY_NAME;
@@ -126,16 +127,29 @@
                 + instance + ", but no metadata service can build from it.");
         }
 
+        URL url = urls.get(0);
+
         // Simply rely on the first metadata url, as stated in MetadataServiceURLBuilder.
         ApplicationModel applicationModel = instance.getApplicationModel();
         ModuleModel internalModel = applicationModel.getInternalModule();
-        ConsumerModel consumerModel = applicationModel.getInternalModule().registerInternalConsumer(MetadataService.class, urls.get(0));
+        ConsumerModel consumerModel = applicationModel.getInternalModule().registerInternalConsumer(MetadataService.class, url);
 
         Protocol protocol = applicationModel.getExtensionLoader(Protocol.class).getAdaptiveExtension();
-        Invoker<MetadataService> invoker = protocol.refer(MetadataService.class, urls.get(0));
+
+        url.setServiceModel(consumerModel);
+
+        Invoker<MetadataService> invoker = protocol.refer(MetadataService.class, url);
 
         ProxyFactory proxyFactory = applicationModel.getExtensionLoader(ProxyFactory.class).getAdaptiveExtension();
-        return new ProxyHolder(consumerModel, proxyFactory.getProxy(invoker), internalModel);
+
+        MetadataService metadataService = proxyFactory.getProxy(invoker);
+
+        consumerModel.getServiceMetadata().setTarget(metadataService);
+        consumerModel.getServiceMetadata().addAttribute(PROXY_CLASS_REF, metadataService);
+        consumerModel.setProxyObject(metadataService);
+        consumerModel.initMethodModels();
+
+        return new ProxyHolder(consumerModel, metadataService, internalModel);
     }
 
     public static MetadataInfo getRemoteMetadata(String revision, List<ServiceInstance> instances, MetadataReport metadataReport) {
@@ -150,7 +164,6 @@
                 metadataInfo = MetadataUtils.getMetadata(revision, instance, metadataReport);
             } else {
                 // change the instance used to communicate to avoid all requests route to the same instance
-                MetadataService metadataServiceProxy = null;
                 ProxyHolder proxyHolder = null;
                 try {
                     proxyHolder = MetadataUtils.referProxy(instance);
diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/proxy/AbstractProxyFactory.java b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/proxy/AbstractProxyFactory.java
index 55bb92f..974c73a 100644
--- a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/proxy/AbstractProxyFactory.java
+++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/proxy/AbstractProxyFactory.java
@@ -109,8 +109,8 @@
     private <T> ClassLoader getClassLoader(Invoker<T> invoker) {
         ServiceModel serviceModel = invoker.getUrl().getServiceModel();
         ClassLoader classLoader = null;
-        if (serviceModel != null && serviceModel.getConfig() != null) {
-            classLoader = serviceModel.getConfig().getInterfaceClassLoader();
+        if (serviceModel != null && serviceModel.getInterfaceClassLoader() != null) {
+            classLoader = serviceModel.getInterfaceClassLoader();
         }
         if (classLoader == null) {
             classLoader = ClassUtils.getClassLoader();
diff --git a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java
index 38acb87..c950d13 100644
--- a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java
+++ b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java
@@ -158,7 +158,7 @@
                     ServiceDescriptor serviceDescriptor = moduleModel.getServiceRepository().registerService(clazz);
                     ServiceMetadata serviceMetadata = new ServiceMetadata(clazz.getName() + "." + instid, exportUrl.getGroup(), exportUrl.getVersion(), clazz);
                     String serviceKey = BaseServiceMetadata.buildServiceKey(exportUrl.getPath(), group, exportUrl.getVersion());
-                    ProviderModel providerModel = new ProviderModel(serviceKey, inst, serviceDescriptor, null, moduleModel, serviceMetadata);
+                    ProviderModel providerModel = new ProviderModel(serviceKey, inst, serviceDescriptor, moduleModel, serviceMetadata, ClassUtils.getClassLoader(clazz));
                     moduleModel.getServiceRepository().registerProvider(providerModel);
 
                     exportUrl = exportUrl.setScopeModel(moduleModel);
diff --git a/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/ArgumentCallbackTest.java b/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/ArgumentCallbackTest.java
index ff7dd83..2505daf 100644
--- a/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/ArgumentCallbackTest.java
+++ b/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/ArgumentCallbackTest.java
@@ -17,6 +17,7 @@
 package org.apache.dubbo.rpc.protocol.dubbo;
 
 import org.apache.dubbo.common.URL;
+import org.apache.dubbo.common.utils.ClassUtils;
 import org.apache.dubbo.common.utils.NetUtils;
 import org.apache.dubbo.remoting.Constants;
 import org.apache.dubbo.rpc.Exporter;
@@ -87,8 +88,8 @@
                 + "&retries=0"
                 + "&" + CALLBACK_INSTANCES_LIMIT_KEY + "=" + callbacks)
             .setScopeModel(ApplicationModel.defaultModel().getDefaultModule())
-            .setServiceModel(new ConsumerModel(IDemoService.class.getName(), null, null, null,
-            ApplicationModel.defaultModel().getDefaultModule(), null, null));
+            .setServiceModel(new ConsumerModel(IDemoService.class.getName(), null, null,
+                ApplicationModel.defaultModel().getDefaultModule(), null, null, ClassUtils.getClassLoader(IDemoService.class)));
 
         //      uncomment is unblock invoking
 //        serviceURL = serviceURL.addParameter("yyy."+Constants.ASYNC_KEY,String.valueOf(true));
@@ -111,13 +112,13 @@
         } catch (Exception e) {
         }
     }
-    
+
     @Test
     public void TestCallbackNormalWithBindPort() throws Exception {
         initOrResetUrl(1, 10000000);
-        consumerUrl = serviceURL.addParameter(Constants.BIND_PORT_KEY,"7653");
+        consumerUrl = serviceURL.addParameter(Constants.BIND_PORT_KEY, "7653");
         initOrResetService();
-       
+
         final AtomicInteger count = new AtomicInteger(0);
 
         demoProxy.xxx(new IDemoCallback() {
diff --git a/dubbo-rpc/dubbo-rpc-grpc/src/main/java/org/apache/dubbo/rpc/protocol/grpc/GrpcProtocol.java b/dubbo-rpc/dubbo-rpc-grpc/src/main/java/org/apache/dubbo/rpc/protocol/grpc/GrpcProtocol.java
index d7a7391..2223311 100644
--- a/dubbo-rpc/dubbo-rpc-grpc/src/main/java/org/apache/dubbo/rpc/protocol/grpc/GrpcProtocol.java
+++ b/dubbo-rpc/dubbo-rpc-grpc/src/main/java/org/apache/dubbo/rpc/protocol/grpc/GrpcProtocol.java
@@ -19,7 +19,6 @@
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
-import org.apache.dubbo.config.ReferenceConfigBase;
 import org.apache.dubbo.rpc.Invoker;
 import org.apache.dubbo.rpc.ProtocolServer;
 import org.apache.dubbo.rpc.RpcException;
@@ -108,7 +107,7 @@
         final Method dubboStubMethod;
         try {
             dubboStubMethod = enclosingClass.getDeclaredMethod("getDubboStub", Channel.class, CallOptions.class,
-                    URL.class, ReferenceConfigBase.class);
+                    URL.class);
         } catch (NoSuchMethodException e) {
             throw new IllegalArgumentException("Does not find getDubboStub in " + enclosingClass.getName() + ", please use the customized protoc-gen-dubbo-java to update the generated classes.");
         }
@@ -118,12 +117,10 @@
 
         // CallOptions
         try {
-            ReferenceConfigBase<?> referenceConfig = url.getServiceModel().getReferenceConfig();
             @SuppressWarnings("unchecked") final T stub = (T) dubboStubMethod.invoke(null,
                     channel,
                     GrpcOptionsUtils.buildCallOptions(url),
-                    url,
-                    referenceConfig
+                    url
             );
             final Invoker<T> target = proxyFactory.getInvoker(stub, type, url);
             GrpcInvoker<T> grpcInvoker = new GrpcInvoker<>(type, url, target, channel);
diff --git a/dubbo-rpc/dubbo-rpc-grpc/src/test/java/org/apache/dubbo/rpc/protocol/grpc/GrpcProtocolTest.java b/dubbo-rpc/dubbo-rpc-grpc/src/test/java/org/apache/dubbo/rpc/protocol/grpc/GrpcProtocolTest.java
index af410b8..1e63f66 100644
--- a/dubbo-rpc/dubbo-rpc-grpc/src/test/java/org/apache/dubbo/rpc/protocol/grpc/GrpcProtocolTest.java
+++ b/dubbo-rpc/dubbo-rpc-grpc/src/test/java/org/apache/dubbo/rpc/protocol/grpc/GrpcProtocolTest.java
@@ -74,8 +74,8 @@
         serviceMetadata.setServiceKey(URL.buildKey(DubboGreeterGrpc.IGreeter.class.getName(), null, null));
 
         Map<String, AsyncMethodInfo> methodConfigs = new HashMap<>();
-        ConsumerModel consumerModel = new ConsumerModel(serviceMetadata.getServiceKey(), null, serviceDescriptor, mockReferenceConfig,
-            serviceMetadata, methodConfigs);
+        ConsumerModel consumerModel = new ConsumerModel(serviceMetadata.getServiceKey(), null, serviceDescriptor,
+            serviceMetadata, methodConfigs, mockReferenceConfig.getInterfaceClassLoader());
 
         ApplicationModel.defaultModel().getDefaultModule().getServiceRepository().registerConsumer(consumerModel);
 
diff --git a/dubbo-rpc/dubbo-rpc-grpc/src/test/java/org/apache/dubbo/rpc/protocol/grpc/support/DubboGreeterGrpc.java b/dubbo-rpc/dubbo-rpc-grpc/src/test/java/org/apache/dubbo/rpc/protocol/grpc/support/DubboGreeterGrpc.java
index a30962f..72a30d1 100644
--- a/dubbo-rpc/dubbo-rpc-grpc/src/test/java/org/apache/dubbo/rpc/protocol/grpc/support/DubboGreeterGrpc.java
+++ b/dubbo-rpc/dubbo-rpc-grpc/src/test/java/org/apache/dubbo/rpc/protocol/grpc/support/DubboGreeterGrpc.java
@@ -38,16 +38,13 @@
     public static class DubboGreeterStub implements IGreeter {
 
         protected URL url;
-        protected ReferenceConfigBase<?> referenceConfig;
 
         protected GreeterGrpc.GreeterBlockingStub blockingStub;
         protected GreeterGrpc.GreeterFutureStub futureStub;
         protected GreeterGrpc.GreeterStub stub;
 
-        public DubboGreeterStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions, URL url,
-                                ReferenceConfigBase<?> referenceConfig) {
+        public DubboGreeterStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions, URL url) {
             this.url = url;
-            this.referenceConfig = referenceConfig;
 
             blockingStub = GreeterGrpc.newBlockingStub(channel).build(channel, callOptions);
             futureStub = GreeterGrpc.newFutureStub(channel).build(channel, callOptions);
@@ -82,9 +79,8 @@
 
     }
 
-    public static DubboGreeterStub getDubboStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions, URL url,
-                                                ReferenceConfigBase<?> referenceConfig) {
-        return new DubboGreeterStub(channel, callOptions, url, referenceConfig);
+    public static DubboGreeterStub getDubboStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions, URL url) {
+        return new DubboGreeterStub(channel, callOptions, url);
     }
 
     public interface IGreeter {
diff --git a/dubbo-rpc/dubbo-rpc-injvm/src/test/java/org/apache/dubbo/rpc/protocol/injvm/InjvmClassLoaderTest.java b/dubbo-rpc/dubbo-rpc-injvm/src/test/java/org/apache/dubbo/rpc/protocol/injvm/InjvmClassLoaderTest.java
index 04e5b3b..c91f505 100644
--- a/dubbo-rpc/dubbo-rpc-injvm/src/test/java/org/apache/dubbo/rpc/protocol/injvm/InjvmClassLoaderTest.java
+++ b/dubbo-rpc/dubbo-rpc-injvm/src/test/java/org/apache/dubbo/rpc/protocol/injvm/InjvmClassLoaderTest.java
@@ -19,6 +19,7 @@
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.compiler.support.CtClassBuilder;
 import org.apache.dubbo.common.compiler.support.JavassistCompiler;
+import org.apache.dubbo.common.utils.ClassUtils;
 import org.apache.dubbo.config.ApplicationConfig;
 import org.apache.dubbo.rpc.Exporter;
 import org.apache.dubbo.rpc.Invoker;
@@ -105,8 +106,8 @@
 
         // refer consumer
         ServiceDescriptor consumerServiceDescriptor = moduleModel.getServiceRepository().registerService(clazz2);
-        ConsumerModel consumerModel = new ConsumerModel(clazz2.getName(), null, consumerServiceDescriptor, null,
-            ApplicationModel.defaultModel().getDefaultModule(), null, null);
+        ConsumerModel consumerModel = new ConsumerModel(clazz2.getName(), null, consumerServiceDescriptor,
+            ApplicationModel.defaultModel().getDefaultModule(), null, null, ClassUtils.getClassLoader(clazz2));
         consumerModel.setClassLoader(classLoader3);
         URL consumerUrl = url.setScopeModel(moduleModel).setServiceModel(consumerModel);
 
diff --git a/dubbo-rpc/dubbo-rpc-injvm/src/test/java/org/apache/dubbo/rpc/protocol/injvm/InjvmDeepCopyTest.java b/dubbo-rpc/dubbo-rpc-injvm/src/test/java/org/apache/dubbo/rpc/protocol/injvm/InjvmDeepCopyTest.java
index b8ea63c..80aea35 100644
--- a/dubbo-rpc/dubbo-rpc-injvm/src/test/java/org/apache/dubbo/rpc/protocol/injvm/InjvmDeepCopyTest.java
+++ b/dubbo-rpc/dubbo-rpc-injvm/src/test/java/org/apache/dubbo/rpc/protocol/injvm/InjvmDeepCopyTest.java
@@ -17,6 +17,7 @@
 package org.apache.dubbo.rpc.protocol.injvm;
 
 import org.apache.dubbo.common.URL;
+import org.apache.dubbo.common.utils.ClassUtils;
 import org.apache.dubbo.config.ApplicationConfig;
 import org.apache.dubbo.rpc.Exporter;
 import org.apache.dubbo.rpc.Invoker;
@@ -67,8 +68,8 @@
 
         // refer consumer
         ServiceDescriptor consumerServiceDescriptor = moduleModel.getServiceRepository().registerService(DemoInterface.class);
-        ConsumerModel consumerModel = new ConsumerModel(DemoInterface.class.getName(), null, consumerServiceDescriptor, null,
-            ApplicationModel.defaultModel().getDefaultModule(), null, null);
+        ConsumerModel consumerModel = new ConsumerModel(DemoInterface.class.getName(), null, consumerServiceDescriptor,
+            ApplicationModel.defaultModel().getDefaultModule(), null, null, ClassUtils.getClassLoader(DemoInterface.class));
         URL consumerUrl = url.setScopeModel(moduleModel).setServiceModel(consumerModel);
 
         DemoInterface stub = proxyFactory.getProxy(protocol.refer(DemoInterface.class, consumerUrl));
diff --git a/dubbo-rpc/dubbo-rpc-triple/src/test/java/org/apache/dubbo/rpc/protocol/tri/TripleProtocolTest.java b/dubbo-rpc/dubbo-rpc-triple/src/test/java/org/apache/dubbo/rpc/protocol/tri/TripleProtocolTest.java
index 8887ddc..3065ad0 100644
--- a/dubbo-rpc/dubbo-rpc-triple/src/test/java/org/apache/dubbo/rpc/protocol/tri/TripleProtocolTest.java
+++ b/dubbo-rpc/dubbo-rpc-triple/src/test/java/org/apache/dubbo/rpc/protocol/tri/TripleProtocolTest.java
@@ -19,6 +19,7 @@
 
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.stream.StreamObserver;
+import org.apache.dubbo.common.utils.ClassUtils;
 import org.apache.dubbo.common.utils.NetUtils;
 import org.apache.dubbo.rpc.Exporter;
 import org.apache.dubbo.rpc.Invoker;
@@ -62,8 +63,7 @@
             providerUrl.getServiceKey(),
             serviceImpl,
             serviceDescriptor,
-            null,
-            new ServiceMetadata());
+            new ServiceMetadata(), ClassUtils.getClassLoader(IGreeter.class));
         serviceRepository.registerProvider(providerModel);
         providerUrl = providerUrl.setServiceModel(providerModel);
 
