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 <[email protected]> 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; }
