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 36c770744348..e47e19d07faf 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 @@ -624,6 +624,22 @@ private Map> getExtensionClasses() { // synchronized in getExtensionClasses private Map> loadExtensionClasses() { + cacheDefaultExtensionName(); + + Map> extensionClasses = new HashMap<>(); + loadDirectory(extensionClasses, DUBBO_INTERNAL_DIRECTORY, type.getName()); + loadDirectory(extensionClasses, DUBBO_INTERNAL_DIRECTORY, type.getName().replace("org.apache", "com.alibaba")); + loadDirectory(extensionClasses, DUBBO_DIRECTORY, type.getName()); + loadDirectory(extensionClasses, DUBBO_DIRECTORY, type.getName().replace("org.apache", "com.alibaba")); + loadDirectory(extensionClasses, SERVICES_DIRECTORY, type.getName()); + loadDirectory(extensionClasses, SERVICES_DIRECTORY, type.getName().replace("org.apache", "com.alibaba")); + return extensionClasses; + } + + /** + * extract and cache default extension name if exists + */ + private void cacheDefaultExtensionName() { final SPI defaultAnnotation = type.getAnnotation(SPI.class); if (defaultAnnotation != null) { String value = defaultAnnotation.value(); @@ -638,15 +654,6 @@ private Map> loadExtensionClasses() { } } } - - Map> extensionClasses = new HashMap>(); - loadDirectory(extensionClasses, DUBBO_INTERNAL_DIRECTORY, type.getName()); - loadDirectory(extensionClasses, DUBBO_INTERNAL_DIRECTORY, type.getName().replace("org.apache", "com.alibaba")); - loadDirectory(extensionClasses, DUBBO_DIRECTORY, type.getName()); - loadDirectory(extensionClasses, DUBBO_DIRECTORY, type.getName().replace("org.apache", "com.alibaba")); - loadDirectory(extensionClasses, SERVICES_DIRECTORY, type.getName()); - loadDirectory(extensionClasses, SERVICES_DIRECTORY, type.getName().replace("org.apache", "com.alibaba")); - return extensionClasses; } private void loadDirectory(Map> extensionClasses, String dir, String type) {