diff --git a/dubbo-common/src/main/java/com/alibaba/dubbo/common/extension/ExtensionLoader.java b/dubbo-common/src/main/java/com/alibaba/dubbo/common/extension/ExtensionLoader.java index eea65ad54584bf05bb791bd6c2155609672f32cd..ba698dfdab3480e4bea365b40a82885835e8212e 100644 --- a/dubbo-common/src/main/java/com/alibaba/dubbo/common/extension/ExtensionLoader.java +++ b/dubbo-common/src/main/java/com/alibaba/dubbo/common/extension/ExtensionLoader.java @@ -241,6 +241,18 @@ public class ExtensionLoader { return false; } + @SuppressWarnings("unchecked") + public T getLoadedExtension(String name) { + if (name == null || name.length() == 0) + throw new IllegalArgumentException("Extension name == null"); + Reference reference = cachedInstances.get(name); + if (reference == null) { + cachedInstances.putIfAbsent(name, new Reference()); + reference = cachedInstances.get(name); + } + return (T) reference.get(); + } + @SuppressWarnings("unchecked") public T getExtension(String name) { if (name == null || name.length() == 0) diff --git a/dubbo-config/dubbo-config-api/src/main/java/com/alibaba/dubbo/config/ProtocolConfig.java b/dubbo-config/dubbo-config-api/src/main/java/com/alibaba/dubbo/config/ProtocolConfig.java index 5ebd1f454fa6a61c46e1ef11749b10e5afd7b64f..3f1383f21db6c5847e376f569d8fc8ae4335c313 100644 --- a/dubbo-config/dubbo-config-api/src/main/java/com/alibaba/dubbo/config/ProtocolConfig.java +++ b/dubbo-config/dubbo-config-api/src/main/java/com/alibaba/dubbo/config/ProtocolConfig.java @@ -406,9 +406,13 @@ public class ProtocolConfig extends AbstractConfig { public static void destroyAll() { AbstractRegistryFactory.destroyAll(); - for (String protocol : ExtensionLoader.getExtensionLoader(Protocol.class).getLoadedExtensions()) { + ExtensionLoader loader = ExtensionLoader.getExtensionLoader(Protocol.class); + for (String protocolName : loader.getLoadedExtensions()) { try { - ExtensionLoader.getExtensionLoader(Protocol.class).getExtension(protocol).destroy(); + Protocol protocol = loader.getLoadedExtension(protocolName); + if (protocol != null) { + protocol.destroy(); + } } catch (Throwable t) { logger.warn(t.getMessage(), t); } diff --git a/dubbo-config/dubbo-config-api/src/main/java/com/alibaba/dubbo/config/RegistryConfig.java b/dubbo-config/dubbo-config-api/src/main/java/com/alibaba/dubbo/config/RegistryConfig.java index e7e7029caf05907a8da62d7c1c3d50f0e09a9cce..7a06d636e7b4bf0857dcc7a483ebc2497bdf2bd7 100644 --- a/dubbo-config/dubbo-config-api/src/main/java/com/alibaba/dubbo/config/RegistryConfig.java +++ b/dubbo-config/dubbo-config-api/src/main/java/com/alibaba/dubbo/config/RegistryConfig.java @@ -276,10 +276,6 @@ public class RegistryConfig extends AbstractConfig { this.subscribe = subscribe; } - public static void closeAll() { - AbstractRegistryFactory.destroyAll(); - } - public String getGroup() { return group; } @@ -313,4 +309,13 @@ public class RegistryConfig extends AbstractConfig { this.isDefault = isDefault; } + public static void destroyAll() { + AbstractRegistryFactory.destroyAll(); + } + + @Deprecated + public static void closeAll() { + destroyAll(); + } + } \ No newline at end of file