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 <[email protected]> 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 { /**
