You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by ky...@apache.org on 2021/08/20 07:38:41 UTC

[dubbo] branch 3.0-multi-instances updated (d8fee83 -> ee720ea)

This is an automated email from the ASF dual-hosted git repository.

kylixs pushed a change to branch 3.0-multi-instances
in repository https://gitbox.apache.org/repos/asf/dubbo.git.


    from d8fee83  Fix access static getter method of ApplicationModel
     new 7efcb57  Replace ExtensionFactory with ExtensionInjector
     new ee720ea  specify scope of some SPIs

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../org/apache/dubbo/common/compiler/Compiler.java |  3 +-
 .../common/config/OrderedPropertiesProvider.java   |  3 +-
 .../configcenter/DynamicConfigurationFactory.java  |  3 +-
 .../apache/dubbo/common/context/FrameworkExt.java  |  3 +-
 .../org/apache/dubbo/common/convert/Converter.java |  3 +-
 .../convert/multiple/MultiValueConverter.java      |  3 +-
 .../dubbo/common/extension/ExtensionFactory.java   | 11 +++++--
 ...xtensionFactory.java => ExtensionInjector.java} | 10 +++---
 .../dubbo/common/extension/ExtensionLoader.java    | 30 ++++++++++-------
 .../dubbo/common/extension/ExtensionScope.java     | 34 +++++++++++++++++++
 .../org/apache/dubbo/common/extension/SPI.java     |  4 +--
 ...Factory.java => AdaptiveExtensionInjector.java} | 20 ++++++------
 ...nsionFactory.java => SpiExtensionInjector.java} |  8 ++---
 .../apache/dubbo/common/infra/InfraAdapter.java    |  3 +-
 .../dubbo/common/lang/ShutdownHookCallback.java    |  3 +-
 .../apache/dubbo/common/logger/LoggerAdapter.java  |  3 +-
 .../apache/dubbo/common/status/StatusChecker.java  |  3 +-
 .../status/reporter/FrameworkStatusReporter.java   |  3 +-
 .../org/apache/dubbo/common/store/DataStore.java   |  3 +-
 .../apache/dubbo/common/threadpool/ThreadPool.java |  4 ++-
 .../threadpool/manager/ExecutorRepository.java     |  3 +-
 .../url/component/param/DynamicParamSource.java    |  3 +-
 .../dubbo/rpc/model/ApplicationInitListener.java   |  3 +-
 .../apache/dubbo/rpc/model/ApplicationModel.java   | 20 +++++++-----
 .../dubbo/rpc/model/BuiltinServiceDetector.java    |  3 +-
 .../org/apache/dubbo/rpc/model/FrameworkModel.java | 13 +++++---
 .../org/apache/dubbo/rpc/model/ModuleModel.java    |  4 +++
 ....apache.dubbo.common.extension.ExtensionFactory |  2 --
 ...apache.dubbo.common.extension.ExtensionInjector |  2 ++
 .../dubbo/common/extension/ExtensionFactory.java   |  3 +-
 .../dubbo/common/extension/ExtensionTest.java      | 14 ++++----
 .../dubbo/common/extension/MyExtensionFactory.java | 12 +++++++
 .../dubbo/config/spring/ConfigCenterBean.java      |  4 +--
 .../apache/dubbo/config/spring/ServiceBean.java    |  8 ++---
 .../DubboInfraBeanRegisterPostProcessor.java       |  4 +--
 ...onFactory.java => SpringExtensionInjector.java} | 12 +++----
 .../spring/status/DataSourceStatusChecker.java     |  4 +--
 .../config/spring/status/SpringStatusChecker.java  |  4 +--
 ....apache.dubbo.common.extension.ExtensionFactory |  1 -
 ...apache.dubbo.common.extension.ExtensionInjector |  1 +
 ...yTest.java => SpringExtensionInjectorTest.java} | 22 ++++++-------
 .../javaconfig/JavaConfigReferenceBeanTest.java    | 38 +++++++++++-----------
 .../spring/status/DataSourceStatusCheckerTest.java |  4 +--
 .../spring/status/SpringStatusCheckerTest.java     | 13 ++++----
 dubbo-distribution/dubbo-all/pom.xml               |  2 +-
 dubbo-distribution/dubbo-core-spi/pom.xml          |  2 +-
 .../main/java/org/apache/dubbo/rpc/Protocol.java   |  3 +-
 .../org/apache/dubbo/rpc/support/MockInvoker.java  |  8 ++---
 48 files changed, 232 insertions(+), 137 deletions(-)
 copy dubbo-common/src/main/java/org/apache/dubbo/common/extension/{ExtensionFactory.java => ExtensionInjector.java} (81%)
 rename dubbo-common/src/main/java/org/apache/dubbo/common/extension/factory/{AdaptiveExtensionFactory.java => AdaptiveExtensionInjector.java} (69%)
 rename dubbo-common/src/main/java/org/apache/dubbo/common/extension/factory/{SpiExtensionFactory.java => SpiExtensionInjector.java} (86%)
 delete mode 100644 dubbo-common/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.common.extension.ExtensionFactory
 create mode 100644 dubbo-common/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.common.extension.ExtensionInjector
 rename dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/extension/{SpringExtensionFactory.java => SpringExtensionInjector.java} (90%)
 delete mode 100644 dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.common.extension.ExtensionFactory
 create mode 100644 dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.common.extension.ExtensionInjector
 rename dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/extension/{SpringExtensionFactoryTest.java => SpringExtensionInjectorTest.java} (78%)

[dubbo] 02/02: specify scope of some SPIs

Posted by ky...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

kylixs pushed a commit to branch 3.0-multi-instances
in repository https://gitbox.apache.org/repos/asf/dubbo.git

commit ee720eaafa9012d5d1588667f314c346de70fd37
Author: gongdewei <ky...@qq.com>
AuthorDate: Fri Aug 20 15:37:49 2021 +0800

    specify scope of some SPIs
---
 .../org/apache/dubbo/common/compiler/Compiler.java |  3 +-
 .../common/config/OrderedPropertiesProvider.java   |  3 +-
 .../configcenter/DynamicConfigurationFactory.java  |  3 +-
 .../apache/dubbo/common/context/FrameworkExt.java  |  3 +-
 .../org/apache/dubbo/common/convert/Converter.java |  3 +-
 .../convert/multiple/MultiValueConverter.java      |  3 +-
 .../dubbo/common/extension/ExtensionScope.java     | 34 ++++++++++++++++++++++
 .../org/apache/dubbo/common/extension/SPI.java     |  4 +--
 .../apache/dubbo/common/infra/InfraAdapter.java    |  3 +-
 .../dubbo/common/lang/ShutdownHookCallback.java    |  3 +-
 .../apache/dubbo/common/logger/LoggerAdapter.java  |  3 +-
 .../apache/dubbo/common/status/StatusChecker.java  |  3 +-
 .../status/reporter/FrameworkStatusReporter.java   |  3 +-
 .../org/apache/dubbo/common/store/DataStore.java   |  3 +-
 .../apache/dubbo/common/threadpool/ThreadPool.java |  4 ++-
 .../threadpool/manager/ExecutorRepository.java     |  3 +-
 .../url/component/param/DynamicParamSource.java    |  3 +-
 .../dubbo/rpc/model/ApplicationInitListener.java   |  3 +-
 .../apache/dubbo/rpc/model/ApplicationModel.java   | 20 ++++++++-----
 .../dubbo/rpc/model/BuiltinServiceDetector.java    |  3 +-
 .../org/apache/dubbo/rpc/model/FrameworkModel.java | 13 ++++++---
 .../org/apache/dubbo/rpc/model/ModuleModel.java    |  4 +++
 .../main/java/org/apache/dubbo/rpc/Protocol.java   |  3 +-
 23 files changed, 98 insertions(+), 32 deletions(-)

diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/compiler/Compiler.java b/dubbo-common/src/main/java/org/apache/dubbo/common/compiler/Compiler.java
index acac7bd..ecf6f14 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/compiler/Compiler.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/compiler/Compiler.java
@@ -16,12 +16,13 @@
  */
 package org.apache.dubbo.common.compiler;
 
+import org.apache.dubbo.common.extension.ExtensionScope;
 import org.apache.dubbo.common.extension.SPI;
 
 /**
  * Compiler. (SPI, Singleton, ThreadSafe)
  */
-@SPI("javassist")
+@SPI(value = "javassist", scope = ExtensionScope.FRAMEWORK)
 public interface Compiler {
 
     /**
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/config/OrderedPropertiesProvider.java b/dubbo-common/src/main/java/org/apache/dubbo/common/config/OrderedPropertiesProvider.java
index 4068311..e1c02e7 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/OrderedPropertiesProvider.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/OrderedPropertiesProvider.java
@@ -17,6 +17,7 @@
 package org.apache.dubbo.common.config;
 
 
+import org.apache.dubbo.common.extension.ExtensionScope;
 import org.apache.dubbo.common.extension.SPI;
 
 import java.util.Properties;
@@ -26,7 +27,7 @@ import java.util.Properties;
  * The smaller value, the higher priority
  * 
  */
-@SPI
+@SPI(scope = ExtensionScope.APPLICATION)
 public interface OrderedPropertiesProvider {
     /**
      * order
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/DynamicConfigurationFactory.java b/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/DynamicConfigurationFactory.java
index f1f6100..4b7118d 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/DynamicConfigurationFactory.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/DynamicConfigurationFactory.java
@@ -18,6 +18,7 @@ package org.apache.dubbo.common.config.configcenter;
 
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.extension.ExtensionLoader;
+import org.apache.dubbo.common.extension.ExtensionScope;
 import org.apache.dubbo.common.extension.SPI;
 
 import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;
@@ -25,7 +26,7 @@ import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoad
 /**
  * The factory interface to create the instance of {@link DynamicConfiguration}
  */
-@SPI("nop") // 2.7.5 change the default SPI implementation
+@SPI(value = "nop", scope = ExtensionScope.APPLICATION) // 2.7.5 change the default SPI implementation
 public interface DynamicConfigurationFactory {
 
     DynamicConfiguration getDynamicConfiguration(URL url);
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/context/FrameworkExt.java b/dubbo-common/src/main/java/org/apache/dubbo/common/context/FrameworkExt.java
index 47cd15e..8fd724d 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/context/FrameworkExt.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/context/FrameworkExt.java
@@ -16,9 +16,10 @@
  */
 package org.apache.dubbo.common.context;
 
+import org.apache.dubbo.common.extension.ExtensionScope;
 import org.apache.dubbo.common.extension.SPI;
 
-@SPI
+@SPI(scope = ExtensionScope.APPLICATION)
 public interface FrameworkExt extends Lifecycle {
 
 }
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/convert/Converter.java b/dubbo-common/src/main/java/org/apache/dubbo/common/convert/Converter.java
index e36fdf2..ec7c1da 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/convert/Converter.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/convert/Converter.java
@@ -17,6 +17,7 @@
 package org.apache.dubbo.common.convert;
 
 import org.apache.dubbo.common.extension.ExtensionLoader;
+import org.apache.dubbo.common.extension.ExtensionScope;
 import org.apache.dubbo.common.extension.SPI;
 import org.apache.dubbo.common.lang.Prioritized;
 
@@ -31,7 +32,7 @@ import static org.apache.dubbo.common.utils.TypeUtils.findActualTypeArgument;
  * @param <T> The target type
  * @since 2.7.6
  */
-@SPI
+@SPI(scope = ExtensionScope.FRAMEWORK)
 @FunctionalInterface
 public interface Converter<S, T> extends Prioritized {
 
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/convert/multiple/MultiValueConverter.java b/dubbo-common/src/main/java/org/apache/dubbo/common/convert/multiple/MultiValueConverter.java
index 637d1a8..9b5210d 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/convert/multiple/MultiValueConverter.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/convert/multiple/MultiValueConverter.java
@@ -17,6 +17,7 @@
 package org.apache.dubbo.common.convert.multiple;
 
 import org.apache.dubbo.common.extension.ExtensionLoader;
+import org.apache.dubbo.common.extension.ExtensionScope;
 import org.apache.dubbo.common.extension.SPI;
 import org.apache.dubbo.common.lang.Prioritized;
 
@@ -32,7 +33,7 @@ import static org.apache.dubbo.common.utils.TypeUtils.findActualTypeArgument;
  * @param <S> The source type
  * @since 2.7.6
  */
-@SPI
+@SPI(scope = ExtensionScope.FRAMEWORK)
 public interface MultiValueConverter<S> extends Prioritized {
 
     /**
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionScope.java b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionScope.java
index 4391e52..7f32bf6 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionScope.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionScope.java
@@ -16,24 +16,58 @@
  */
 package org.apache.dubbo.common.extension;
 
+import org.apache.dubbo.rpc.model.ApplicationModel;
+import org.apache.dubbo.rpc.model.FrameworkModel;
+import org.apache.dubbo.rpc.model.ModuleModel;
+
 /**
  * Extension SPI Scope
+ * @see SPI
+ * @see ExtensionDirector
  */
 public enum ExtensionScope {
 
     /**
      * The extension instance is used within framework, shared with all applications and modules.
+     *
+     * <p>Framework scope SPI extension can only obtain {@link FrameworkModel},
+     * cannot get the {@link ApplicationModel} and {@link ModuleModel}.</p>
+     *
+     * <p></p>
+     * Consideration:
+     * <ol>
+     * <li>Some SPI need share data between applications inside framework</li>
+     * <li>Stateless SPI is safe shared inside framework</li>
+     * </ol>
      */
     FRAMEWORK,
 
     /**
      * The extension instance is used within one application, shared with all modules of the application,
      * and different applications create different extension instances.
+     *
+     * <p>Application scope SPI extension can obtain {@link FrameworkModel} and {@link ApplicationModel},
+     * cannot get the {@link ModuleModel}.</p>
+     *
+     * <p></p>
+     * Consideration:
+     * <ol>
+     * <li>Isolate extension data in different applications inside framework</li>
+     * <li>Share extension data between all modules inside application</li>
+     * </ol>
      */
     APPLICATION,
 
     /**
      * The extension instance is used within one module, and different modules create different extension instances.
+     *
+     * <p>Module scope SPI extension can obtain {@link FrameworkModel}, {@link ApplicationModel} and {@link ModuleModel}.</p>
+     *
+     * <p></p>
+     * Consideration:
+     * <ol>
+     * <li>Isolate extension data in different modules inside application</li>
+     * </ol>
      */
     MODULE
 }
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/SPI.java b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/SPI.java
index 76e9fd5..47cd1fc 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/SPI.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/SPI.java
@@ -62,7 +62,7 @@ public @interface SPI {
     String value() default "";
 
     /**
-     * scope of SPI
+     * scope of SPI, default value is application scope.
      */
-    ExtensionScope scope() default ExtensionScope.FRAMEWORK;
+    ExtensionScope scope() default ExtensionScope.APPLICATION;
 }
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/infra/InfraAdapter.java b/dubbo-common/src/main/java/org/apache/dubbo/common/infra/InfraAdapter.java
index 539ffe9..3784069 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/infra/InfraAdapter.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/infra/InfraAdapter.java
@@ -16,6 +16,7 @@
  */
 package org.apache.dubbo.common.infra;
 
+import org.apache.dubbo.common.extension.ExtensionScope;
 import org.apache.dubbo.common.extension.SPI;
 
 import java.util.Map;
@@ -26,7 +27,7 @@ import java.util.Map;
  * 2. get configurations from third-party systems which maybe useful for a specific component.
  */
 
-@SPI
+@SPI(scope = ExtensionScope.APPLICATION)
 public interface InfraAdapter {
 
     /**
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/lang/ShutdownHookCallback.java b/dubbo-common/src/main/java/org/apache/dubbo/common/lang/ShutdownHookCallback.java
index 52d5605..3ce6556 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/lang/ShutdownHookCallback.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/lang/ShutdownHookCallback.java
@@ -16,6 +16,7 @@
  */
 package org.apache.dubbo.common.lang;
 
+import org.apache.dubbo.common.extension.ExtensionScope;
 import org.apache.dubbo.common.extension.SPI;
 
 /**
@@ -23,7 +24,7 @@ import org.apache.dubbo.common.extension.SPI;
  *
  * @since 2.7.5
  */
-@SPI
+@SPI(scope = ExtensionScope.APPLICATION)
 public interface ShutdownHookCallback extends Prioritized {
 
     /**
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/logger/LoggerAdapter.java b/dubbo-common/src/main/java/org/apache/dubbo/common/logger/LoggerAdapter.java
index 1560c64..fc644e5 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/logger/LoggerAdapter.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/logger/LoggerAdapter.java
@@ -16,6 +16,7 @@
  */
 package org.apache.dubbo.common.logger;
 
+import org.apache.dubbo.common.extension.ExtensionScope;
 import org.apache.dubbo.common.extension.SPI;
 
 import java.io.File;
@@ -23,7 +24,7 @@ import java.io.File;
 /**
  * Logger provider
  */
-@SPI
+@SPI(scope = ExtensionScope.FRAMEWORK)
 public interface LoggerAdapter {
 
     /**
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/status/StatusChecker.java b/dubbo-common/src/main/java/org/apache/dubbo/common/status/StatusChecker.java
index b5d7c41..2ff75cf 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/status/StatusChecker.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/status/StatusChecker.java
@@ -16,12 +16,13 @@
  */
 package org.apache.dubbo.common.status;
 
+import org.apache.dubbo.common.extension.ExtensionScope;
 import org.apache.dubbo.common.extension.SPI;
 
 /**
  * StatusChecker
  */
-@SPI
+@SPI(scope = ExtensionScope.APPLICATION)
 public interface StatusChecker {
 
     /**
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/status/reporter/FrameworkStatusReporter.java b/dubbo-common/src/main/java/org/apache/dubbo/common/status/reporter/FrameworkStatusReporter.java
index b267ac5..e34996c 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/status/reporter/FrameworkStatusReporter.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/status/reporter/FrameworkStatusReporter.java
@@ -17,6 +17,7 @@
 package org.apache.dubbo.common.status.reporter;
 
 import org.apache.dubbo.common.extension.ExtensionLoader;
+import org.apache.dubbo.common.extension.ExtensionScope;
 import org.apache.dubbo.common.extension.SPI;
 import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
@@ -28,7 +29,7 @@ import com.google.gson.Gson;
 import java.util.HashMap;
 import java.util.Set;
 
-@SPI
+@SPI(scope = ExtensionScope.APPLICATION)
 public interface FrameworkStatusReporter {
     static final Gson gson = new Gson();
     Logger logger = LoggerFactory.getLogger(FrameworkStatusReporter.class);
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/store/DataStore.java b/dubbo-common/src/main/java/org/apache/dubbo/common/store/DataStore.java
index 8a6d475..59d7414 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/store/DataStore.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/store/DataStore.java
@@ -17,11 +17,12 @@
 
 package org.apache.dubbo.common.store;
 
+import org.apache.dubbo.common.extension.ExtensionScope;
 import org.apache.dubbo.common.extension.SPI;
 
 import java.util.Map;
 
-@SPI("simple")
+@SPI(value = "simple", scope = ExtensionScope.APPLICATION)
 public interface DataStore {
 
     /**
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/ThreadPool.java b/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/ThreadPool.java
index 312cd69..b1ff4a8 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/ThreadPool.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/ThreadPool.java
@@ -18,6 +18,7 @@ package org.apache.dubbo.common.threadpool;
 
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.extension.Adaptive;
+import org.apache.dubbo.common.extension.ExtensionScope;
 import org.apache.dubbo.common.extension.SPI;
 
 import java.util.concurrent.Executor;
@@ -27,7 +28,8 @@ import static org.apache.dubbo.common.constants.CommonConstants.THREADPOOL_KEY;
 /**
  * ThreadPool
  */
-@SPI("fixed")
+//TODO which scope for ThreadPool? APPLICATION or FRAMEWORK
+@SPI(value = "fixed", scope = ExtensionScope.FRAMEWORK)
 public interface ThreadPool {
 
     /**
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/manager/ExecutorRepository.java b/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/manager/ExecutorRepository.java
index b209f48..dabd581 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/manager/ExecutorRepository.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/manager/ExecutorRepository.java
@@ -17,6 +17,7 @@
 package org.apache.dubbo.common.threadpool.manager;
 
 import org.apache.dubbo.common.URL;
+import org.apache.dubbo.common.extension.ExtensionScope;
 import org.apache.dubbo.common.extension.SPI;
 
 import java.util.concurrent.ExecutorService;
@@ -25,7 +26,7 @@ import java.util.concurrent.ScheduledExecutorService;
 /**
  *
  */
-@SPI("default")
+@SPI(value = "default", scope = ExtensionScope.APPLICATION)
 public interface ExecutorRepository {
 
     /**
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/url/component/param/DynamicParamSource.java b/dubbo-common/src/main/java/org/apache/dubbo/common/url/component/param/DynamicParamSource.java
index 15df9aa..49008f1 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/url/component/param/DynamicParamSource.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/url/component/param/DynamicParamSource.java
@@ -16,11 +16,12 @@
  */
 package org.apache.dubbo.common.url.component.param;
 
+import org.apache.dubbo.common.extension.ExtensionScope;
 import org.apache.dubbo.common.extension.SPI;
 
 import java.util.List;
 
-@SPI
+@SPI(scope = ExtensionScope.FRAMEWORK)
 public interface DynamicParamSource {
 
     void init(List<String> keys, List<ParamValue> values);
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ApplicationInitListener.java b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ApplicationInitListener.java
index 8b0f488..1e4b50b 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ApplicationInitListener.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ApplicationInitListener.java
@@ -16,9 +16,10 @@
  */
 package org.apache.dubbo.rpc.model;
 
+import org.apache.dubbo.common.extension.ExtensionScope;
 import org.apache.dubbo.common.extension.SPI;
 
-@SPI
+@SPI(scope = ExtensionScope.APPLICATION)
 public interface ApplicationInitListener {
     /**
      * init the application
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java
index 0d47697..f48d237 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java
@@ -75,14 +75,6 @@ public class ApplicationModel {
         return defaultInstance;
     }
 
-    public FrameworkModel getFrameworkModel() {
-        return frameworkModel;
-    }
-
-    public ExtensionDirector getExtensionDirector() {
-        return extensionDirector;
-    }
-
     public void init() {
         if (initFlag.compareAndSet(false, true)) {
             ExtensionLoader<ApplicationInitListener> extensionLoader = ExtensionLoader.getExtensionLoader(ApplicationInitListener.class);
@@ -97,6 +89,18 @@ public class ApplicationModel {
         // TODO destroy application resources
     }
 
+    public FrameworkModel getFrameworkModel() {
+        return frameworkModel;
+    }
+
+    public ExtensionDirector getExtensionDirector() {
+        return extensionDirector;
+    }
+
+    public <T> ExtensionLoader<T> getExtensionLoader(Class<T> type) {
+        return extensionDirector.getExtensionLoader(type);
+    }
+
     public Collection<ConsumerModel> allConsumerModels() {
         return getServiceRepository().getReferredServices();
     }
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/BuiltinServiceDetector.java b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/BuiltinServiceDetector.java
index 06a5725..ca27eb7 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/BuiltinServiceDetector.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/BuiltinServiceDetector.java
@@ -16,9 +16,10 @@
  */
 package org.apache.dubbo.rpc.model;
 
+import org.apache.dubbo.common.extension.ExtensionScope;
 import org.apache.dubbo.common.extension.SPI;
 
-@SPI
+@SPI(scope = ExtensionScope.FRAMEWORK)
 public interface BuiltinServiceDetector {
 
     Class<?> getService();
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/FrameworkModel.java b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/FrameworkModel.java
index 859f5e8..1a6a07f 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/FrameworkModel.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/FrameworkModel.java
@@ -17,6 +17,7 @@
 package org.apache.dubbo.rpc.model;
 
 import org.apache.dubbo.common.extension.ExtensionDirector;
+import org.apache.dubbo.common.extension.ExtensionLoader;
 import org.apache.dubbo.common.extension.ExtensionScope;
 
 /**
@@ -33,10 +34,6 @@ public class FrameworkModel {
         extensionDirector.addExtensionPostProcessor(new ModelAwarePostProcessor(this));
     }
 
-    public ExtensionDirector getExtensionDirector() {
-        return extensionDirector;
-    }
-
     public static FrameworkModel defaultModel() {
         if (defaultInstance == null) {
             synchronized (FrameworkModel.class) {
@@ -47,4 +44,12 @@ public class FrameworkModel {
         }
         return defaultInstance;
     }
+
+    public ExtensionDirector getExtensionDirector() {
+        return extensionDirector;
+    }
+
+    public <T> ExtensionLoader<T> getExtensionLoader(Class<T> type) {
+        return extensionDirector.getExtensionLoader(type);
+    }
 }
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 1334b80..f0f68de 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
@@ -17,6 +17,7 @@
 package org.apache.dubbo.rpc.model;
 
 import org.apache.dubbo.common.extension.ExtensionDirector;
+import org.apache.dubbo.common.extension.ExtensionLoader;
 import org.apache.dubbo.common.extension.ExtensionScope;
 
 /**
@@ -41,4 +42,7 @@ public class ModuleModel {
         return extensionDirector;
     }
 
+    public <T> ExtensionLoader<T> getExtensionLoader(Class<T> type) {
+        return extensionDirector.getExtensionLoader(type);
+    }
 }
diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/Protocol.java b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/Protocol.java
index 5f86ec5..838801d 100644
--- a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/Protocol.java
+++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/Protocol.java
@@ -18,6 +18,7 @@ package org.apache.dubbo.rpc;
 
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.extension.Adaptive;
+import org.apache.dubbo.common.extension.ExtensionScope;
 import org.apache.dubbo.common.extension.SPI;
 
 import java.util.Collections;
@@ -26,7 +27,7 @@ import java.util.List;
 /**
  * Protocol. (API/SPI, Singleton, ThreadSafe)
  */
-@SPI("dubbo")
+@SPI(value = "dubbo", scope = ExtensionScope.FRAMEWORK)
 public interface Protocol {
 
     /**

[dubbo] 01/02: Replace ExtensionFactory with ExtensionInjector

Posted by ky...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

kylixs pushed a commit to branch 3.0-multi-instances
in repository https://gitbox.apache.org/repos/asf/dubbo.git

commit 7efcb572865c812dbfb51039192b7f602b69b8a3
Author: gongdewei <ky...@qq.com>
AuthorDate: Fri Aug 20 15:36:45 2021 +0800

    Replace ExtensionFactory with ExtensionInjector
---
 .../dubbo/common/extension/ExtensionFactory.java   | 11 +++++--
 ...xtensionFactory.java => ExtensionInjector.java} | 10 +++---
 .../dubbo/common/extension/ExtensionLoader.java    | 30 ++++++++++-------
 ...Factory.java => AdaptiveExtensionInjector.java} | 20 ++++++------
 ...nsionFactory.java => SpiExtensionInjector.java} |  8 ++---
 ....apache.dubbo.common.extension.ExtensionFactory |  2 --
 ...apache.dubbo.common.extension.ExtensionInjector |  2 ++
 .../dubbo/common/extension/ExtensionFactory.java   |  3 +-
 .../dubbo/common/extension/ExtensionTest.java      | 14 ++++----
 .../dubbo/common/extension/MyExtensionFactory.java | 12 +++++++
 .../dubbo/config/spring/ConfigCenterBean.java      |  4 +--
 .../apache/dubbo/config/spring/ServiceBean.java    |  8 ++---
 .../DubboInfraBeanRegisterPostProcessor.java       |  4 +--
 ...onFactory.java => SpringExtensionInjector.java} | 12 +++----
 .../spring/status/DataSourceStatusChecker.java     |  4 +--
 .../config/spring/status/SpringStatusChecker.java  |  4 +--
 ....apache.dubbo.common.extension.ExtensionFactory |  1 -
 ...apache.dubbo.common.extension.ExtensionInjector |  1 +
 ...yTest.java => SpringExtensionInjectorTest.java} | 22 ++++++-------
 .../javaconfig/JavaConfigReferenceBeanTest.java    | 38 +++++++++++-----------
 .../spring/status/DataSourceStatusCheckerTest.java |  4 +--
 .../spring/status/SpringStatusCheckerTest.java     | 13 ++++----
 dubbo-distribution/dubbo-all/pom.xml               |  2 +-
 dubbo-distribution/dubbo-core-spi/pom.xml          |  2 +-
 .../org/apache/dubbo/rpc/support/MockInvoker.java  |  8 ++---
 25 files changed, 134 insertions(+), 105 deletions(-)

diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionFactory.java b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionFactory.java
index 32bb846..6eab44d 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionFactory.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionFactory.java
@@ -18,9 +18,16 @@ package org.apache.dubbo.common.extension;
 
 /**
  * ExtensionFactory
+ * @deprecated use {@link ExtensionInjector} instead
  */
-@SPI
-public interface ExtensionFactory {
+@Deprecated
+@SPI(scope = ExtensionScope.FRAMEWORK)
+public interface ExtensionFactory extends ExtensionInjector {
+
+    @Override
+    default <T> T getInstance(Class<T> type, String name) {
+        return getExtension(type, name);
+    }
 
     /**
      * Get extension.
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionFactory.java b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionInjector.java
similarity index 81%
copy from dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionFactory.java
copy to dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionInjector.java
index 32bb846..c550645 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionFactory.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionInjector.java
@@ -17,18 +17,18 @@
 package org.apache.dubbo.common.extension;
 
 /**
- * ExtensionFactory
+ * An injector to provide resources for SPI extension.
  */
-@SPI
-public interface ExtensionFactory {
+@SPI(scope = ExtensionScope.FRAMEWORK)
+public interface ExtensionInjector {
 
     /**
-     * Get extension.
+     * Get instance of specify type and name.
      *
      * @param type object type.
      * @param name object name.
      * @return object instance.
      */
-    <T> T getExtension(Class<T> type, String name);
+    <T> T getInstance(Class<T> type, String name);
 
 }
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 4d30c22..feae2d4 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
@@ -98,7 +98,7 @@ public class ExtensionLoader<T> {
 
     private final Class<?> type;
 
-    private final ExtensionFactory objectFactory;
+    private final ExtensionInjector injector;
 
     private final ConcurrentMap<Class<?>, String> cachedNames = new ConcurrentHashMap<>();
 
@@ -161,17 +161,16 @@ public class ExtensionLoader<T> {
         this.extensionDirector = extensionDirector;
         this.extensionPostProcessors = extensionDirector.getExtensionPostProcessors();
         this.type = type;
-        this.objectFactory = (type == ExtensionFactory.class ? null : extensionDirector.getExtensionLoader(ExtensionFactory.class)
+        this.injector = (type == ExtensionInjector.class ? null : extensionDirector.getExtensionLoader(ExtensionInjector.class)
             .getAdaptiveExtension());
     }
 
     /**
-     * @deprecated get extension loader from extension director of some module.
-     *
      * @see ApplicationModel#getExtensionDirector()
      * @see FrameworkModel#getExtensionDirector()
      * @see ModuleModel#getExtensionDirector()
      * @see ExtensionDirector#getExtensionLoader(java.lang.Class)
+     * @deprecated get extension loader from extension director of some module.
      */
     @Deprecated
     public static <T> ExtensionLoader<T> getExtensionLoader(Class<T> type) {
@@ -749,7 +748,7 @@ public class ExtensionLoader<T> {
 
     private T injectExtension(T instance) {
 
-        if (objectFactory == null) {
+        if (injector == null) {
             return instance;
         }
 
@@ -771,7 +770,7 @@ public class ExtensionLoader<T> {
 
                 try {
                     String property = getSetterProperty(method);
-                    Object object = objectFactory.getExtension(pt, property);
+                    Object object = injector.getInstance(pt, property);
                     if (object != null) {
                         method.invoke(instance, object);
                     }
@@ -851,16 +850,25 @@ public class ExtensionLoader<T> {
         Map<String, Class<?>> extensionClasses = new HashMap<>();
 
         for (LoadingStrategy strategy : strategies) {
-            loadDirectory(extensionClasses, strategy.directory(), type.getName(), strategy.preferExtensionClassLoader(),
-                strategy.overridden(), strategy.excludedPackages());
-            String oldType = this.type.getName().replace("org.apache", "com.alibaba");
-            loadDirectory(extensionClasses, strategy.directory(), oldType, strategy.preferExtensionClassLoader(),
-                strategy.overridden(), strategy.excludedPackages());
+            loadDirectory(extensionClasses, strategy, type.getName());
+
+            // compatible with old ExtensionFactory
+            if (this.type == ExtensionInjector.class) {
+                loadDirectory(extensionClasses, strategy, ExtensionFactory.class.getName());
+            }
         }
 
         return extensionClasses;
     }
 
+    private void loadDirectory(Map<String, Class<?>> extensionClasses, LoadingStrategy strategy, String type) {
+        loadDirectory(extensionClasses, strategy.directory(), type, strategy.preferExtensionClassLoader(),
+            strategy.overridden(), strategy.excludedPackages());
+        String oldType = type.replace("org.apache", "com.alibaba");
+        loadDirectory(extensionClasses, strategy.directory(), oldType, strategy.preferExtensionClassLoader(),
+            strategy.overridden(), strategy.excludedPackages());
+    }
+
     /**
      * extract and cache default extension name if exists
      */
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/factory/AdaptiveExtensionFactory.java b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/factory/AdaptiveExtensionInjector.java
similarity index 69%
rename from dubbo-common/src/main/java/org/apache/dubbo/common/extension/factory/AdaptiveExtensionFactory.java
rename to dubbo-common/src/main/java/org/apache/dubbo/common/extension/factory/AdaptiveExtensionInjector.java
index d136ebc..8c76f50 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/factory/AdaptiveExtensionFactory.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/factory/AdaptiveExtensionInjector.java
@@ -17,7 +17,7 @@
 package org.apache.dubbo.common.extension.factory;
 
 import org.apache.dubbo.common.extension.Adaptive;
-import org.apache.dubbo.common.extension.ExtensionFactory;
+import org.apache.dubbo.common.extension.ExtensionInjector;
 import org.apache.dubbo.common.extension.ExtensionLoader;
 
 import java.util.ArrayList;
@@ -25,16 +25,16 @@ import java.util.Collections;
 import java.util.List;
 
 /**
- * AdaptiveExtensionFactory
+ * AdaptiveExtensionInjector
  */
 @Adaptive
-public class AdaptiveExtensionFactory implements ExtensionFactory {
+public class AdaptiveExtensionInjector implements ExtensionInjector {
 
-    private final List<ExtensionFactory> factories;
+    private final List<ExtensionInjector> factories;
 
-    public AdaptiveExtensionFactory() {
-        ExtensionLoader<ExtensionFactory> loader = ExtensionLoader.getExtensionLoader(ExtensionFactory.class);
-        List<ExtensionFactory> list = new ArrayList<ExtensionFactory>();
+    public AdaptiveExtensionInjector() {
+        ExtensionLoader<ExtensionInjector> loader = ExtensionLoader.getExtensionLoader(ExtensionInjector.class);
+        List<ExtensionInjector> list = new ArrayList<ExtensionInjector>();
         for (String name : loader.getSupportedExtensions()) {
             list.add(loader.getExtension(name));
         }
@@ -42,9 +42,9 @@ public class AdaptiveExtensionFactory implements ExtensionFactory {
     }
 
     @Override
-    public <T> T getExtension(Class<T> type, String name) {
-        for (ExtensionFactory factory : factories) {
-            T extension = factory.getExtension(type, name);
+    public <T> T getInstance(Class<T> type, String name) {
+        for (ExtensionInjector factory : factories) {
+            T extension = factory.getInstance(type, name);
             if (extension != null) {
                 return extension;
             }
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/factory/SpiExtensionFactory.java b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/factory/SpiExtensionInjector.java
similarity index 86%
rename from dubbo-common/src/main/java/org/apache/dubbo/common/extension/factory/SpiExtensionFactory.java
rename to dubbo-common/src/main/java/org/apache/dubbo/common/extension/factory/SpiExtensionInjector.java
index 46cbe19..746e3ce 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/factory/SpiExtensionFactory.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/factory/SpiExtensionInjector.java
@@ -16,17 +16,17 @@
  */
 package org.apache.dubbo.common.extension.factory;
 
-import org.apache.dubbo.common.extension.ExtensionFactory;
+import org.apache.dubbo.common.extension.ExtensionInjector;
 import org.apache.dubbo.common.extension.ExtensionLoader;
 import org.apache.dubbo.common.extension.SPI;
 
 /**
- * SpiExtensionFactory
+ * SpiExtensionInjector
  */
-public class SpiExtensionFactory implements ExtensionFactory {
+public class SpiExtensionInjector implements ExtensionInjector {
 
     @Override
-    public <T> T getExtension(Class<T> type, String name) {
+    public <T> T getInstance(Class<T> type, String name) {
         if (type.isInterface() && type.isAnnotationPresent(SPI.class)) {
             ExtensionLoader<T> loader = ExtensionLoader.getExtensionLoader(type);
             if (!loader.getSupportedExtensions().isEmpty()) {
diff --git a/dubbo-common/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.common.extension.ExtensionFactory b/dubbo-common/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.common.extension.ExtensionFactory
deleted file mode 100644
index 094382f..0000000
--- a/dubbo-common/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.common.extension.ExtensionFactory
+++ /dev/null
@@ -1,2 +0,0 @@
-adaptive=org.apache.dubbo.common.extension.factory.AdaptiveExtensionFactory
-spi=org.apache.dubbo.common.extension.factory.SpiExtensionFactory
\ No newline at end of file
diff --git a/dubbo-common/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.common.extension.ExtensionInjector b/dubbo-common/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.common.extension.ExtensionInjector
new file mode 100644
index 0000000..3a4e291
--- /dev/null
+++ b/dubbo-common/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.common.extension.ExtensionInjector
@@ -0,0 +1,2 @@
+adaptive=org.apache.dubbo.common.extension.factory.AdaptiveExtensionInjector
+spi=org.apache.dubbo.common.extension.factory.SpiExtensionInjector
diff --git a/dubbo-compatible/src/main/java/com/alibaba/dubbo/common/extension/ExtensionFactory.java b/dubbo-compatible/src/main/java/com/alibaba/dubbo/common/extension/ExtensionFactory.java
index bc0f0b2..2a2f35f 100644
--- a/dubbo-compatible/src/main/java/com/alibaba/dubbo/common/extension/ExtensionFactory.java
+++ b/dubbo-compatible/src/main/java/com/alibaba/dubbo/common/extension/ExtensionFactory.java
@@ -16,10 +16,11 @@
  */
 package com.alibaba.dubbo.common.extension;
 
+import org.apache.dubbo.common.extension.ExtensionScope;
 import org.apache.dubbo.common.extension.SPI;
 
 @Deprecated
-@SPI
+@SPI(scope = ExtensionScope.FRAMEWORK)
 public interface ExtensionFactory extends org.apache.dubbo.common.extension.ExtensionFactory {
 
 }
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/common/extension/ExtensionTest.java b/dubbo-compatible/src/test/java/org/apache/dubbo/common/extension/ExtensionTest.java
index 2b7a5c8..b126d6a 100644
--- a/dubbo-compatible/src/test/java/org/apache/dubbo/common/extension/ExtensionTest.java
+++ b/dubbo-compatible/src/test/java/org/apache/dubbo/common/extension/ExtensionTest.java
@@ -27,13 +27,15 @@ public class ExtensionTest {
     @Test
     public void testExtensionFactory() {
         try {
-            ExtensionFactory factory = ExtensionLoader.getExtensionLoader(ExtensionFactory.class).getExtension("myfactory");
-            Assertions.assertTrue(factory instanceof ExtensionFactory);
-            Assertions.assertTrue(factory instanceof com.alibaba.dubbo.common.extension.ExtensionFactory);
-            Assertions.assertTrue(factory instanceof MyExtensionFactory);
+            ExtensionInjector myfactory = ExtensionLoader.getExtensionLoader(ExtensionInjector.class).getExtension("myfactory");
+            Assertions.assertTrue(myfactory instanceof ExtensionInjector);
+            Assertions.assertTrue(myfactory instanceof ExtensionFactory);
+            Assertions.assertTrue(myfactory instanceof com.alibaba.dubbo.common.extension.ExtensionFactory);
+            Assertions.assertTrue(myfactory instanceof MyExtensionFactory);
 
-            ExtensionFactory spring = ExtensionLoader.getExtensionLoader(ExtensionFactory.class).getExtension("spring");
-            Assertions.assertTrue(spring instanceof ExtensionFactory);
+            ExtensionInjector spring = ExtensionLoader.getExtensionLoader(ExtensionInjector.class).getExtension("spring");
+            Assertions.assertTrue(spring instanceof ExtensionInjector);
+            Assertions.assertFalse(spring instanceof ExtensionFactory);
             Assertions.assertFalse(spring instanceof com.alibaba.dubbo.common.extension.ExtensionFactory);
         } catch (IllegalArgumentException expected) {
             fail();
diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/common/extension/MyExtensionFactory.java b/dubbo-compatible/src/test/java/org/apache/dubbo/common/extension/MyExtensionFactory.java
index f9602b4..d8bc822 100644
--- a/dubbo-compatible/src/test/java/org/apache/dubbo/common/extension/MyExtensionFactory.java
+++ b/dubbo-compatible/src/test/java/org/apache/dubbo/common/extension/MyExtensionFactory.java
@@ -22,6 +22,18 @@ public class MyExtensionFactory implements ExtensionFactory {
 
     @Override
     public <T> T getExtension(Class<T> type, String name) {
+        if (type == InjectObject.class) {
+            return (T) new InjectObject(name);
+        }
         return null;
     }
+
+
+    public static class InjectObject {
+        private String name;
+
+        public InjectObject(String name) {
+            this.name = name;
+        }
+    }
 }
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ConfigCenterBean.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ConfigCenterBean.java
index 84ddac5..6374cdb 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ConfigCenterBean.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ConfigCenterBean.java
@@ -19,7 +19,7 @@ package org.apache.dubbo.config.spring;
 import org.apache.dubbo.common.config.ConfigurationUtils;
 import org.apache.dubbo.common.utils.StringUtils;
 import org.apache.dubbo.config.ConfigCenterConfig;
-import org.apache.dubbo.config.spring.extension.SpringExtensionFactory;
+import org.apache.dubbo.config.spring.extension.SpringExtensionInjector;
 
 import org.springframework.beans.factory.DisposableBean;
 import org.springframework.context.ApplicationContext;
@@ -46,7 +46,7 @@ public class ConfigCenterBean extends ConfigCenterConfig implements ApplicationC
     @Override
     public void setApplicationContext(ApplicationContext applicationContext) {
         this.applicationContext = applicationContext;
-        SpringExtensionFactory.addApplicationContext(applicationContext);
+        SpringExtensionInjector.addApplicationContext(applicationContext);
     }
 
     @Override
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ServiceBean.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ServiceBean.java
index ca3e85c..94af84a 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ServiceBean.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ServiceBean.java
@@ -21,7 +21,7 @@ import org.apache.dubbo.config.ServiceConfig;
 import org.apache.dubbo.config.annotation.Service;
 import org.apache.dubbo.config.bootstrap.DubboBootstrap;
 import org.apache.dubbo.config.spring.context.event.ServiceBeanExportedEvent;
-import org.apache.dubbo.config.spring.extension.SpringExtensionFactory;
+import org.apache.dubbo.config.spring.extension.SpringExtensionInjector;
 import org.apache.dubbo.config.support.Parameter;
 
 import org.springframework.aop.support.AopUtils;
@@ -65,8 +65,8 @@ public class ServiceBean<T> extends ServiceConfig<T> implements InitializingBean
     @Override
     public void setApplicationContext(ApplicationContext applicationContext) {
         this.applicationContext = applicationContext;
-        //TODO remove SpringExtensionFactory.addApplicationContext();
-        SpringExtensionFactory.addApplicationContext(applicationContext);
+        //TODO remove SpringExtensionInjector.addApplicationContext();
+        SpringExtensionInjector.addApplicationContext(applicationContext);
     }
 
     @Override
@@ -126,7 +126,7 @@ public class ServiceBean<T> extends ServiceConfig<T> implements InitializingBean
     @Override
     public void destroy() throws Exception {
         // no need to call unexport() here, see
-        // org.apache.dubbo.config.spring.extension.SpringExtensionFactory.ShutdownHookListener
+        // org.apache.dubbo.config.spring.extension.SpringExtensionInjector.ShutdownHookListener
     }
 
     // merged from dubbox
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/DubboInfraBeanRegisterPostProcessor.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/DubboInfraBeanRegisterPostProcessor.java
index d223ca9..f6c9b19 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/DubboInfraBeanRegisterPostProcessor.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/DubboInfraBeanRegisterPostProcessor.java
@@ -18,7 +18,7 @@ package org.apache.dubbo.config.spring.context;
 
 import org.apache.dubbo.config.context.ConfigManager;
 import org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor;
-import org.apache.dubbo.config.spring.extension.SpringExtensionFactory;
+import org.apache.dubbo.config.spring.extension.SpringExtensionInjector;
 import org.apache.dubbo.config.spring.util.DubboBeanUtils;
 import org.apache.dubbo.config.spring.util.EnvironmentUtils;
 import org.apache.dubbo.rpc.model.ApplicationModel;
@@ -83,6 +83,6 @@ public class DubboInfraBeanRegisterPostProcessor implements BeanDefinitionRegist
     @Override
     public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
         this.applicationContext = applicationContext;
-        SpringExtensionFactory.addApplicationContext(applicationContext);
+        SpringExtensionInjector.addApplicationContext(applicationContext);
     }
 }
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/extension/SpringExtensionFactory.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/extension/SpringExtensionInjector.java
similarity index 90%
rename from dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/extension/SpringExtensionFactory.java
rename to dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/extension/SpringExtensionInjector.java
index 27eec78..09bf0dd 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/extension/SpringExtensionFactory.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/extension/SpringExtensionInjector.java
@@ -17,7 +17,7 @@
 package org.apache.dubbo.config.spring.extension;
 
 import org.apache.dubbo.common.context.Lifecycle;
-import org.apache.dubbo.common.extension.ExtensionFactory;
+import org.apache.dubbo.common.extension.ExtensionInjector;
 import org.apache.dubbo.common.extension.SPI;
 import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
@@ -31,10 +31,10 @@ import org.springframework.context.ConfigurableApplicationContext;
 import java.util.Set;
 
 /**
- * SpringExtensionFactory
+ * SpringExtensionInjector
  */
-public class SpringExtensionFactory implements ExtensionFactory, Lifecycle {
-    private static final Logger logger = LoggerFactory.getLogger(SpringExtensionFactory.class);
+public class SpringExtensionInjector implements ExtensionInjector, Lifecycle {
+    private static final Logger logger = LoggerFactory.getLogger(SpringExtensionInjector.class);
 
     private static final Set<ApplicationContext> CONTEXTS = new ConcurrentHashSet<ApplicationContext>();
 
@@ -62,9 +62,9 @@ public class SpringExtensionFactory implements ExtensionFactory, Lifecycle {
 
     @Override
     @SuppressWarnings("unchecked")
-    public <T> T getExtension(Class<T> type, String name) {
+    public <T> T getInstance(Class<T> type, String name) {
 
-        //SPI should be get from SpiExtensionFactory
+        //SPI should be get from SpiExtensionInjector
         if (type.isInterface() && type.isAnnotationPresent(SPI.class)) {
             return null;
         }
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/status/DataSourceStatusChecker.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/status/DataSourceStatusChecker.java
index 28323bb..c28db37 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/status/DataSourceStatusChecker.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/status/DataSourceStatusChecker.java
@@ -22,7 +22,7 @@ import org.apache.dubbo.common.logger.LoggerFactory;
 import org.apache.dubbo.common.status.Status;
 import org.apache.dubbo.common.status.StatusChecker;
 import org.apache.dubbo.common.utils.CollectionUtils;
-import org.apache.dubbo.config.spring.extension.SpringExtensionFactory;
+import org.apache.dubbo.config.spring.extension.SpringExtensionInjector;
 
 import org.springframework.context.ApplicationContext;
 
@@ -45,7 +45,7 @@ public class DataSourceStatusChecker implements StatusChecker {
     @Override
     public Status check() {
         Optional<ApplicationContext> context =
-                SpringExtensionFactory.getContexts().stream().filter(Objects::nonNull).findFirst();
+                SpringExtensionInjector.getContexts().stream().filter(Objects::nonNull).findFirst();
 
         if (!context.isPresent()) {
             return new Status(Status.Level.UNKNOWN);
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/status/SpringStatusChecker.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/status/SpringStatusChecker.java
index c259a78..cae9260 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/status/SpringStatusChecker.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/status/SpringStatusChecker.java
@@ -21,7 +21,7 @@ import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
 import org.apache.dubbo.common.status.Status;
 import org.apache.dubbo.common.status.StatusChecker;
-import org.apache.dubbo.config.spring.extension.SpringExtensionFactory;
+import org.apache.dubbo.config.spring.extension.SpringExtensionInjector;
 
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.Lifecycle;
@@ -40,7 +40,7 @@ public class SpringStatusChecker implements StatusChecker {
     @Override
     public Status check() {
         ApplicationContext context = null;
-        for (ApplicationContext c : SpringExtensionFactory.getContexts()) {
+        for (ApplicationContext c : SpringExtensionInjector.getContexts()) {
             // [Issue] SpringStatusChecker execute errors on non-XML Spring configuration
             // issue : https://github.com/apache/dubbo/issues/3615
             if(c instanceof GenericWebApplicationContext) { // ignore GenericXmlApplicationContext
diff --git a/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.common.extension.ExtensionFactory b/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.common.extension.ExtensionFactory
deleted file mode 100644
index 4ac9db2..0000000
--- a/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.common.extension.ExtensionFactory
+++ /dev/null
@@ -1 +0,0 @@
-spring=org.apache.dubbo.config.spring.extension.SpringExtensionFactory
\ No newline at end of file
diff --git a/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.common.extension.ExtensionInjector b/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.common.extension.ExtensionInjector
new file mode 100644
index 0000000..c5ef410
--- /dev/null
+++ b/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.common.extension.ExtensionInjector
@@ -0,0 +1 @@
+spring=org.apache.dubbo.config.spring.extension.SpringExtensionInjector
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/extension/SpringExtensionFactoryTest.java b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/extension/SpringExtensionInjectorTest.java
similarity index 78%
rename from dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/extension/SpringExtensionFactoryTest.java
rename to dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/extension/SpringExtensionInjectorTest.java
index ca70f1f..71e98d7 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/extension/SpringExtensionFactoryTest.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/extension/SpringExtensionInjectorTest.java
@@ -16,7 +16,7 @@
  */
 package org.apache.dubbo.config.spring.extension;
 
-import org.apache.dubbo.common.extension.ExtensionFactory;
+import org.apache.dubbo.common.extension.ExtensionInjector;
 import org.apache.dubbo.common.extension.ExtensionLoader;
 import org.apache.dubbo.config.bootstrap.DubboBootstrap;
 import org.apache.dubbo.config.spring.api.DemoService;
@@ -34,9 +34,9 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
 @Configuration
-public class SpringExtensionFactoryTest {
+public class SpringExtensionInjectorTest {
 
-    private SpringExtensionFactory springExtensionFactory = new SpringExtensionFactory();
+    private SpringExtensionInjector springExtensionFactory = new SpringExtensionInjector();
     private AnnotationConfigApplicationContext context1;
     private AnnotationConfigApplicationContext context2;
 
@@ -44,8 +44,8 @@ public class SpringExtensionFactoryTest {
     public void init() {
         DubboBootstrap.reset();
 
-        // init SpringExtensionFactory
-        ExtensionLoader.getExtensionLoader(ExtensionFactory.class).getExtension("spring");
+        // init SpringExtensionInjector
+        ExtensionLoader.getExtensionLoader(ExtensionInjector.class).getExtension("spring");
 
         context1 = new AnnotationConfigApplicationContext();
         context1.setDisplayName("Context1");
@@ -55,28 +55,28 @@ public class SpringExtensionFactoryTest {
         context2.setDisplayName("Context2");
         context2.register(BeanForContext2.class);
         context2.refresh();
-        SpringExtensionFactory.addApplicationContext(context1);
-        SpringExtensionFactory.addApplicationContext(context2);
+        SpringExtensionInjector.addApplicationContext(context1);
+        SpringExtensionInjector.addApplicationContext(context2);
     }
 
     @AfterEach
     public void destroy() {
         context1.close();
         context2.close();
-        SpringExtensionFactory.clearContexts();
+        SpringExtensionInjector.clearContexts();
     }
 
     @Test
     public void testGetExtensionBySPI() {
-        Protocol protocol = springExtensionFactory.getExtension(Protocol.class, "protocol");
+        Protocol protocol = springExtensionFactory.getInstance(Protocol.class, "protocol");
         Assertions.assertNull(protocol);
     }
 
     @Test
     public void testGetExtensionByName() {
-        DemoService bean = springExtensionFactory.getExtension(DemoService.class, "bean1");
+        DemoService bean = springExtensionFactory.getInstance(DemoService.class, "bean1");
         Assertions.assertNotNull(bean);
-        HelloService hello = springExtensionFactory.getExtension(HelloService.class, "hello");
+        HelloService hello = springExtensionFactory.getInstance(HelloService.class, "hello");
         Assertions.assertNotNull(hello);
     }
 
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/reference/javaconfig/JavaConfigReferenceBeanTest.java b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/reference/javaconfig/JavaConfigReferenceBeanTest.java
index 805b09a..c0cec6c 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/reference/javaconfig/JavaConfigReferenceBeanTest.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/reference/javaconfig/JavaConfigReferenceBeanTest.java
@@ -21,11 +21,11 @@ import org.apache.dubbo.config.annotation.DubboService;
 import org.apache.dubbo.config.annotation.Reference;
 import org.apache.dubbo.config.bootstrap.DubboBootstrap;
 import org.apache.dubbo.config.spring.ReferenceBean;
+import org.apache.dubbo.config.spring.extension.SpringExtensionInjector;
 import org.apache.dubbo.config.spring.registrycenter.ZooKeeperServer;
 import org.apache.dubbo.config.spring.api.DemoService;
 import org.apache.dubbo.config.spring.api.HelloService;
 import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
-import org.apache.dubbo.config.spring.extension.SpringExtensionFactory;
 import org.apache.dubbo.config.spring.impl.HelloServiceImpl;
 import org.apache.dubbo.config.spring.reference.ReferenceBeanBuilder;
 import org.apache.dubbo.rpc.service.GenericException;
@@ -71,7 +71,7 @@ public class JavaConfigReferenceBeanTest {
 
     @Test
     public void testAnnotationAtField() {
-        Assertions.assertEquals(0, SpringExtensionFactory.getContexts().size());
+        Assertions.assertEquals(0, SpringExtensionInjector.getContexts().size());
         AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(CommonConfig.class,
             AnnotationAtFieldConfiguration.class);
 
@@ -88,7 +88,7 @@ public class JavaConfigReferenceBeanTest {
         Assertions.assertEquals(HelloService.class.getName(), referenceBean.getServiceInterface());
 
         context.close();
-        Assertions.assertEquals(1, SpringExtensionFactory.getContexts().size());
+        Assertions.assertEquals(1, SpringExtensionInjector.getContexts().size());
     }
 
     @Test
@@ -116,7 +116,7 @@ public class JavaConfigReferenceBeanTest {
 
     @Test
     public void testAnnotationBean() {
-        Assertions.assertEquals(0, SpringExtensionFactory.getContexts().size());
+        Assertions.assertEquals(0, SpringExtensionInjector.getContexts().size());
         AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(CommonConfig.class,
                 AnnotationBeanConfiguration.class);
 
@@ -133,12 +133,12 @@ public class JavaConfigReferenceBeanTest {
         Assertions.assertEquals(HelloService.class.getName(), referenceBean.getServiceInterface());
 
         context.close();
-        Assertions.assertEquals(1, SpringExtensionFactory.getContexts().size());
+        Assertions.assertEquals(1, SpringExtensionInjector.getContexts().size());
     }
 
     @Test
     public void testGenericServiceAnnotationBean() {
-        Assertions.assertEquals(0, SpringExtensionFactory.getContexts().size());
+        Assertions.assertEquals(0, SpringExtensionInjector.getContexts().size());
         AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(CommonConfig.class,
             GenericServiceAnnotationBeanConfiguration.class);
 
@@ -169,12 +169,12 @@ public class JavaConfigReferenceBeanTest {
         Assertions.assertEquals("Hello Dubbo", sayHelloResult);
 
         context.close();
-        Assertions.assertEquals(1, SpringExtensionFactory.getContexts().size());
+        Assertions.assertEquals(1, SpringExtensionInjector.getContexts().size());
     }
 
     @Test
     public void testReferenceBean() {
-        Assertions.assertEquals(0, SpringExtensionFactory.getContexts().size());
+        Assertions.assertEquals(0, SpringExtensionInjector.getContexts().size());
         AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(CommonConfig.class,
                 ReferenceBeanConfiguration.class);
 
@@ -194,12 +194,12 @@ public class JavaConfigReferenceBeanTest {
         Assertions.assertEquals(DemoService.class.getName(), demoServiceReferenceBean.getServiceInterface());
 
         context.close();
-        Assertions.assertEquals(1, SpringExtensionFactory.getContexts().size());
+        Assertions.assertEquals(1, SpringExtensionInjector.getContexts().size());
     }
 
     @Test
     public void testGenericServiceReferenceBean() {
-        Assertions.assertEquals(0, SpringExtensionFactory.getContexts().size());
+        Assertions.assertEquals(0, SpringExtensionInjector.getContexts().size());
         AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(CommonConfig.class,
             GenericServiceReferenceBeanConfiguration.class);
 
@@ -221,14 +221,14 @@ public class JavaConfigReferenceBeanTest {
         Assertions.assertEquals(HelloService.class.getName(), genericHelloServiceReferenceBean.getServiceInterface());
 
         context.close();
-        Assertions.assertEquals(1, SpringExtensionFactory.getContexts().size());
+        Assertions.assertEquals(1, SpringExtensionInjector.getContexts().size());
     }
 
     @Test
     public void testRawReferenceBean() {
         AnnotationConfigApplicationContext context = null;
         try {
-            Assertions.assertEquals(0, SpringExtensionFactory.getContexts().size());
+            Assertions.assertEquals(0, SpringExtensionInjector.getContexts().size());
             context = new AnnotationConfigApplicationContext(CommonConfig.class, ReferenceBeanWithoutGenericTypeConfiguration.class);
             Assertions.fail("Should not load application");
 
@@ -240,7 +240,7 @@ public class JavaConfigReferenceBeanTest {
             if (context != null) {
                 context.close();
             }
-            Assertions.assertEquals(1, SpringExtensionFactory.getContexts().size());
+            Assertions.assertEquals(1, SpringExtensionInjector.getContexts().size());
         }
 
     }
@@ -249,7 +249,7 @@ public class JavaConfigReferenceBeanTest {
     public void testInconsistentBean() {
         AnnotationConfigApplicationContext context = null;
         try {
-            Assertions.assertEquals(0, SpringExtensionFactory.getContexts().size());
+            Assertions.assertEquals(0, SpringExtensionInjector.getContexts().size());
             context = new AnnotationConfigApplicationContext(CommonConfig.class, InconsistentBeanConfiguration.class);
             Assertions.fail("Should not load application");
         } catch (Exception e) {
@@ -261,7 +261,7 @@ public class JavaConfigReferenceBeanTest {
             if (context != null) {
                 context.close();
             }
-            Assertions.assertEquals(1, SpringExtensionFactory.getContexts().size());
+            Assertions.assertEquals(1, SpringExtensionInjector.getContexts().size());
         }
     }
 
@@ -269,7 +269,7 @@ public class JavaConfigReferenceBeanTest {
     public void testMissingGenericTypeBean() {
         AnnotationConfigApplicationContext context = null;
         try {
-            Assertions.assertEquals(0, SpringExtensionFactory.getContexts().size());
+            Assertions.assertEquals(0, SpringExtensionInjector.getContexts().size());
             context = new AnnotationConfigApplicationContext(CommonConfig.class, MissingGenericTypeAnnotationBeanConfiguration.class);
             Assertions.fail("Should not load application");
         } catch (Exception e) {
@@ -280,7 +280,7 @@ public class JavaConfigReferenceBeanTest {
             if (context != null) {
                 context.close();
             }
-            Assertions.assertEquals(1, SpringExtensionFactory.getContexts().size());
+            Assertions.assertEquals(1, SpringExtensionInjector.getContexts().size());
         }
     }
 
@@ -288,7 +288,7 @@ public class JavaConfigReferenceBeanTest {
     public void testMissingInterfaceTypeBean() {
         AnnotationConfigApplicationContext context = null;
         try {
-            Assertions.assertEquals(0, SpringExtensionFactory.getContexts().size());
+            Assertions.assertEquals(0, SpringExtensionInjector.getContexts().size());
             context = new AnnotationConfigApplicationContext(CommonConfig.class, MissingInterfaceTypeAnnotationBeanConfiguration.class);
             Assertions.fail("Should not load application");
         } catch (Exception e) {
@@ -298,7 +298,7 @@ public class JavaConfigReferenceBeanTest {
             if (context != null) {
                 context.close();
             }
-            Assertions.assertEquals(1, SpringExtensionFactory.getContexts().size());
+            Assertions.assertEquals(1, SpringExtensionInjector.getContexts().size());
         }
     }
 
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/status/DataSourceStatusCheckerTest.java b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/status/DataSourceStatusCheckerTest.java
index b12d2d4..36985f6 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/status/DataSourceStatusCheckerTest.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/status/DataSourceStatusCheckerTest.java
@@ -18,7 +18,7 @@ package org.apache.dubbo.config.spring.status;
 
 import org.apache.dubbo.common.status.Status;
 import org.apache.dubbo.config.spring.ServiceBean;
-import org.apache.dubbo.config.spring.extension.SpringExtensionFactory;
+import org.apache.dubbo.config.spring.extension.SpringExtensionInjector;
 
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
@@ -50,7 +50,7 @@ public class DataSourceStatusCheckerTest {
 
     @BeforeEach
     public void setUp() throws Exception {
-        SpringExtensionFactory.clearContexts();
+        SpringExtensionInjector.clearContexts();
         initMocks(this);
         this.dataSourceStatusChecker = new DataSourceStatusChecker();
         new ServiceBean<Object>().setApplicationContext(applicationContext);
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/status/SpringStatusCheckerTest.java b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/status/SpringStatusCheckerTest.java
index 288a0fb..d7e1a6d 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/status/SpringStatusCheckerTest.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/status/SpringStatusCheckerTest.java
@@ -18,12 +18,11 @@ package org.apache.dubbo.config.spring.status;
 
 import org.apache.dubbo.common.status.Status;
 import org.apache.dubbo.config.spring.ServiceBean;
-import org.apache.dubbo.config.spring.extension.SpringExtensionFactory;
+import org.apache.dubbo.config.spring.extension.SpringExtensionInjector;
 
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 import org.mockito.Mock;
 import org.mockito.Mockito;
@@ -52,7 +51,7 @@ public class SpringStatusCheckerTest {
 
     @AfterEach
     public void tearDown() throws Exception {
-        SpringExtensionFactory.clearContexts();
+        SpringExtensionInjector.clearContexts();
         Mockito.reset(applicationContext);
     }
 
@@ -65,7 +64,7 @@ public class SpringStatusCheckerTest {
 
     @Test
     public void testWithLifeCycleRunning() {
-        SpringExtensionFactory.clearContexts();
+        SpringExtensionInjector.clearContexts();
         ApplicationLifeCycle applicationLifeCycle = mock(ApplicationLifeCycle.class);
         new ServiceBean<Object>().setApplicationContext(applicationLifeCycle);
         given(applicationLifeCycle.getConfigLocations()).willReturn(new String[]{"test1", "test2"});
@@ -79,7 +78,7 @@ public class SpringStatusCheckerTest {
 
     @Test
     public void testWithoutLifeCycleRunning() {
-        SpringExtensionFactory.clearContexts();
+        SpringExtensionInjector.clearContexts();
         ApplicationLifeCycle applicationLifeCycle = mock(ApplicationLifeCycle.class);
         new ServiceBean<Object>().setApplicationContext(applicationLifeCycle);
         given(applicationLifeCycle.isRunning()).willReturn(false);
@@ -95,9 +94,9 @@ public class SpringStatusCheckerTest {
 
     @Test
     public void testGenericWebApplicationContext() {
-        SpringExtensionFactory.clearContexts();
+        SpringExtensionInjector.clearContexts();
         GenericWebApplicationContext context = new GenericWebApplicationContext();
-        SpringExtensionFactory.addApplicationContext(context);
+        SpringExtensionInjector.addApplicationContext(context);
         SpringStatusChecker checker = new SpringStatusChecker();
         Status status = checker.check();
         Assertions.assertEquals(Status.Level.UNKNOWN, status.getLevel());
diff --git a/dubbo-distribution/dubbo-all/pom.xml b/dubbo-distribution/dubbo-all/pom.xml
index be8d15d..24bde3b 100644
--- a/dubbo-distribution/dubbo-all/pom.xml
+++ b/dubbo-distribution/dubbo-all/pom.xml
@@ -462,7 +462,7 @@
                                 <transformer
                                         implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                     <resource>
-                                        META-INF/dubbo/internal/org.apache.dubbo.common.extension.ExtensionFactory
+                                        META-INF/dubbo/internal/org.apache.dubbo.common.extension.ExtensionInjector
                                     </resource>
                                 </transformer>
                                 <transformer
diff --git a/dubbo-distribution/dubbo-core-spi/pom.xml b/dubbo-distribution/dubbo-core-spi/pom.xml
index 7e9ee1d..0717705 100644
--- a/dubbo-distribution/dubbo-core-spi/pom.xml
+++ b/dubbo-distribution/dubbo-core-spi/pom.xml
@@ -144,7 +144,7 @@
                                 <transformer
                                         implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                     <resource>
-                                        META-INF/dubbo/internal/org.apache.dubbo.common.extension.ExtensionFactory
+                                        META-INF/dubbo/internal/org.apache.dubbo.common.extension.ExtensionInjector
                                     </resource>
                                 </transformer>
                                 <transformer
diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/support/MockInvoker.java b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/support/MockInvoker.java
index 41a5545..f6ba4c5 100644
--- a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/support/MockInvoker.java
+++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/support/MockInvoker.java
@@ -17,7 +17,7 @@
 package org.apache.dubbo.rpc.support;
 
 import org.apache.dubbo.common.URL;
-import org.apache.dubbo.common.extension.ExtensionFactory;
+import org.apache.dubbo.common.extension.ExtensionInjector;
 import org.apache.dubbo.common.extension.ExtensionLoader;
 import org.apache.dubbo.common.utils.ArrayUtils;
 import org.apache.dubbo.common.utils.ConfigUtils;
@@ -188,9 +188,9 @@ final public class MockInvoker<T> implements Invoker<T> {
             mockClass = ReflectUtils.forName(mockService);
         } catch (Exception e) {
             if (!isDefault) {// does not check Spring bean if it is default config.
-                ExtensionFactory extensionFactory =
-                        ExtensionLoader.getExtensionLoader(ExtensionFactory.class).getAdaptiveExtension();
-                Object obj = extensionFactory.getExtension(serviceType, mockService);
+                ExtensionInjector extensionFactory =
+                        ExtensionLoader.getExtensionLoader(ExtensionInjector.class).getAdaptiveExtension();
+                Object obj = extensionFactory.getInstance(serviceType, mockService);
                 if (obj != null) {
                     return obj;
                 }