This is an automated email from the ASF dual-hosted git repository. liujun pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/dubbo.git
commit fe2b1274d07454a32d2399f084cd50cf0e76d625 Author: hengyunabc <[email protected]> AuthorDate: Mon Oct 14 18:07:25 2019 +0800 ExtensionLoader load META-INF/dubbo/internal/ extension from ExtensionLoader ClassLoader first --- .../apache/dubbo/common/extension/ExtensionLoader.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java index bc4739d..2f77ee3 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java @@ -628,8 +628,10 @@ public class ExtensionLoader<T> { cacheDefaultExtensionName(); Map<String, Class<?>> extensionClasses = new HashMap<>(); - loadDirectory(extensionClasses, DUBBO_INTERNAL_DIRECTORY, type.getName()); - loadDirectory(extensionClasses, DUBBO_INTERNAL_DIRECTORY, type.getName().replace("org.apache", "com.alibaba")); + // internal extension load from ExtensionLoader's ClassLoader first + loadDirectory(extensionClasses, DUBBO_INTERNAL_DIRECTORY, type.getName(), true); + loadDirectory(extensionClasses, DUBBO_INTERNAL_DIRECTORY, type.getName().replace("org.apache", "com.alibaba"), true); + loadDirectory(extensionClasses, DUBBO_DIRECTORY, type.getName()); loadDirectory(extensionClasses, DUBBO_DIRECTORY, type.getName().replace("org.apache", "com.alibaba")); loadDirectory(extensionClasses, SERVICES_DIRECTORY, type.getName()); @@ -658,15 +660,21 @@ public class ExtensionLoader<T> { } private void loadDirectory(Map<String, Class<?>> extensionClasses, String dir, String type) { + loadDirectory(extensionClasses, dir, type, false); + } + + private void loadDirectory(Map<String, Class<?>> extensionClasses, String dir, String type, boolean extensionLoaderClassLoaderFirst) { String fileName = dir + type; try { Enumeration<java.net.URL> urls = null; ClassLoader classLoader = findClassLoader(); // try to load from ExtensionLoader's ClassLoader first - ClassLoader extensionLoaderClassLoader = ExtensionLoader.class.getClassLoader(); - if (ClassLoader.getSystemClassLoader() != extensionLoaderClassLoader) { - urls = extensionLoaderClassLoader.getResources(fileName); + if (extensionLoaderClassLoaderFirst) { + ClassLoader extensionLoaderClassLoader = ExtensionLoader.class.getClassLoader(); + if (ClassLoader.getSystemClassLoader() != extensionLoaderClassLoader) { + urls = extensionLoaderClassLoader.getResources(fileName); + } } if(urls == null || !urls.hasMoreElements()) {
