You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2022/07/12 03:16:55 UTC
[dubbo] branch 3.0 updated: refactor ExtensionInjector and related (#10301)
This is an automated email from the ASF dual-hosted git repository.
albumenj pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.0 by this push:
new 4be39e4744 refactor ExtensionInjector and related (#10301)
4be39e4744 is described below
commit 4be39e4744360dc55693499d6c85ea1a26ea54ff
Author: cheese8 <yi...@163.com>
AuthorDate: Tue Jul 12 11:16:48 2022 +0800
refactor ExtensionInjector and related (#10301)
* refactor SpiExtensionInjector and related
* refactor the code style
---
.../common/beans/ScopeBeanExtensionInjector.java | 8 ++-
.../common/extension/ExtensionAccessorAware.java | 2 +-
.../dubbo/common/extension/ExtensionFactory.java | 1 -
.../dubbo/common/extension/ExtensionInjector.java | 4 +-
.../inject/AdaptiveExtensionInjector.java | 11 ++--
.../extension/inject/SpiExtensionInjector.java | 25 +++++----
.../inject/AdaptiveExtensionInjectorTest.java | 4 +-
.../dubbo/common/extension/ExtensionFactory.java | 1 -
.../dubbo/common/extension/MyExtensionFactory.java | 8 +--
.../spring/extension/SpringExtensionInjector.java | 63 ++++++++--------------
.../extension/SpringExtensionInjectorTest.java | 1 -
11 files changed, 49 insertions(+), 79 deletions(-)
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/beans/ScopeBeanExtensionInjector.java b/dubbo-common/src/main/java/org/apache/dubbo/common/beans/ScopeBeanExtensionInjector.java
index 98f6edc1be..570e9fdb92 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/beans/ScopeBeanExtensionInjector.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/beans/ScopeBeanExtensionInjector.java
@@ -25,18 +25,16 @@ import org.apache.dubbo.rpc.model.ScopeModelAware;
* Inject scope bean to SPI extension instance
*/
public class ScopeBeanExtensionInjector implements ExtensionInjector, ScopeModelAware {
- public static final String NAME = "scopeBean";
- private ScopeModel scopeModel;
+
private ScopeBeanFactory beanFactory;
@Override
- public void setScopeModel(ScopeModel scopeModel) {
- this.scopeModel = scopeModel;
+ public void setScopeModel(final ScopeModel scopeModel) {
this.beanFactory = scopeModel.getBeanFactory();
}
@Override
- public <T> T getInstance(Class<T> type, String name) {
+ public <T> T getInstance(final Class<T> type, final String name) {
return beanFactory == null ? null : beanFactory.getBean(name, type);
}
}
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionAccessorAware.java b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionAccessorAware.java
index e2215e5aa9..b0ca06ec2f 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionAccessorAware.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionAccessorAware.java
@@ -21,6 +21,6 @@ package org.apache.dubbo.common.extension;
*/
public interface ExtensionAccessorAware {
- void setExtensionAccessor(ExtensionAccessor extensionAccessor);
+ void setExtensionAccessor(final ExtensionAccessor extensionAccessor);
}
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 6eab44d6bb..4233254437 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
@@ -37,5 +37,4 @@ public interface ExtensionFactory extends ExtensionInjector {
* @return object instance.
*/
<T> T getExtension(Class<T> type, String name);
-
}
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionInjector.java b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionInjector.java
index 490680513b..0441c120f7 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionInjector.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionInjector.java
@@ -29,9 +29,9 @@ public interface ExtensionInjector extends ExtensionAccessorAware {
* @param name object name.
* @return object instance.
*/
- <T> T getInstance(Class<T> type, String name);
+ <T> T getInstance(final Class<T> type, final String name);
@Override
- default void setExtensionAccessor(ExtensionAccessor extensionAccessor) {
+ default void setExtensionAccessor(final ExtensionAccessor extensionAccessor) {
}
}
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/inject/AdaptiveExtensionInjector.java b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/inject/AdaptiveExtensionInjector.java
index 952bf045a4..8551338085 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/inject/AdaptiveExtensionInjector.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/inject/AdaptiveExtensionInjector.java
@@ -22,8 +22,8 @@ import org.apache.dubbo.common.extension.ExtensionAccessor;
import org.apache.dubbo.common.extension.ExtensionInjector;
import org.apache.dubbo.common.extension.ExtensionLoader;
+import java.util.Collection;
import java.util.Collections;
-import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@@ -33,15 +33,14 @@ import java.util.stream.Collectors;
@Adaptive
public class AdaptiveExtensionInjector implements ExtensionInjector, Lifecycle {
- private List<ExtensionInjector> injectors = Collections.emptyList();
-
+ private Collection<ExtensionInjector> injectors = Collections.emptyList();
private ExtensionAccessor extensionAccessor;
public AdaptiveExtensionInjector() {
}
@Override
- public void setExtensionAccessor(ExtensionAccessor extensionAccessor) {
+ public void setExtensionAccessor(final ExtensionAccessor extensionAccessor) {
this.extensionAccessor = extensionAccessor;
}
@@ -54,7 +53,7 @@ public class AdaptiveExtensionInjector implements ExtensionInjector, Lifecycle {
}
@Override
- public <T> T getInstance(Class<T> type, String name) {
+ public <T> T getInstance(final Class<T> type, final String name) {
return injectors.stream()
.map(injector -> injector.getInstance(type, name))
.filter(Objects::nonNull)
@@ -64,11 +63,9 @@ public class AdaptiveExtensionInjector implements ExtensionInjector, Lifecycle {
@Override
public void start() throws IllegalStateException {
-
}
@Override
public void destroy() throws IllegalStateException {
-
}
}
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/inject/SpiExtensionInjector.java b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/inject/SpiExtensionInjector.java
index d30ec85e1a..e2bde42e3c 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/inject/SpiExtensionInjector.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/inject/SpiExtensionInjector.java
@@ -25,27 +25,26 @@ import org.apache.dubbo.common.extension.SPI;
* SpiExtensionInjector
*/
public class SpiExtensionInjector implements ExtensionInjector {
- public static final String NAME = "spi";
-
+
private ExtensionAccessor extensionAccessor;
@Override
- public void setExtensionAccessor(ExtensionAccessor extensionAccessor) {
+ public void setExtensionAccessor(final ExtensionAccessor extensionAccessor) {
this.extensionAccessor = extensionAccessor;
}
@Override
- public <T> T getInstance(Class<T> type, String name) {
- if (type.isInterface() && type.isAnnotationPresent(SPI.class)) {
- ExtensionLoader<T> loader = extensionAccessor.getExtensionLoader(type);
- if (loader == null) {
- return null;
- }
- if (!loader.getSupportedExtensions().isEmpty()) {
- return loader.getAdaptiveExtension();
- }
+ public <T> T getInstance(final Class<T> type, final String name) {
+ if (!type.isInterface() || !type.isAnnotationPresent(SPI.class)) {
+ return null;
+ }
+ ExtensionLoader<T> loader = extensionAccessor.getExtensionLoader(type);
+ if (loader == null) {
+ return null;
+ }
+ if (!loader.getSupportedExtensions().isEmpty()) {
+ return loader.getAdaptiveExtension();
}
return null;
}
-
}
diff --git a/dubbo-common/src/test/java/org/apache/dubbo/common/extension/inject/AdaptiveExtensionInjectorTest.java b/dubbo-common/src/test/java/org/apache/dubbo/common/extension/inject/AdaptiveExtensionInjectorTest.java
index 9057b2f4c8..d533f20258 100644
--- a/dubbo-common/src/test/java/org/apache/dubbo/common/extension/inject/AdaptiveExtensionInjectorTest.java
+++ b/dubbo-common/src/test/java/org/apache/dubbo/common/extension/inject/AdaptiveExtensionInjectorTest.java
@@ -39,8 +39,8 @@ public class AdaptiveExtensionInjectorTest {
ExtensionLoader<ExtensionInjector> extensionLoader = frameworkModel.getExtensionLoader(ExtensionInjector.class);
ExtensionInjector adaptiveExtensionInjector = extensionLoader.getAdaptiveExtension();
- ExtensionInjector scopeExtensionInjector = extensionLoader.getExtension(ScopeBeanExtensionInjector.NAME);
- ExtensionInjector spiExtensionInjector = extensionLoader.getExtension(SpiExtensionInjector.NAME);
+ ExtensionInjector scopeExtensionInjector = extensionLoader.getExtension("scopeBean");
+ ExtensionInjector spiExtensionInjector = extensionLoader.getExtension("spi");
FooFrameworkProvider testFrameworkProvider = adaptiveExtensionInjector.getInstance(FooFrameworkProvider.class, "testFrameworkProvider");
Assertions.assertNotNull(testFrameworkProvider);
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 2a2f35f648..bd98ea2e77 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
@@ -22,5 +22,4 @@ import org.apache.dubbo.common.extension.SPI;
@Deprecated
@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/MyExtensionFactory.java b/dubbo-compatible/src/test/java/org/apache/dubbo/common/extension/MyExtensionFactory.java
index d8bc822a0d..d2187b9d74 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
@@ -21,18 +21,18 @@ import com.alibaba.dubbo.common.extension.ExtensionFactory;
public class MyExtensionFactory implements ExtensionFactory {
@Override
- public <T> T getExtension(Class<T> type, String name) {
+ public <T> T getExtension(final Class<T> type, final String name) {
if (type == InjectObject.class) {
return (T) new InjectObject(name);
}
return null;
}
-
public static class InjectObject {
- private String name;
+
+ private final String name;
- public InjectObject(String name) {
+ public InjectObject(final String name) {
this.name = name;
}
}
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/extension/SpringExtensionInjector.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/extension/SpringExtensionInjector.java
index a451cacc16..cd0b81b1b6 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/extension/SpringExtensionInjector.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/extension/SpringExtensionInjector.java
@@ -20,10 +20,7 @@ import org.apache.dubbo.common.context.Lifecycle;
import org.apache.dubbo.common.extension.ExtensionAccessor;
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;
import org.apache.dubbo.common.utils.StringUtils;
-
import org.springframework.beans.factory.ListableBeanFactory;
import org.springframework.context.ApplicationContext;
@@ -33,49 +30,28 @@ import java.util.Arrays;
* SpringExtensionInjector
*/
public class SpringExtensionInjector implements ExtensionInjector, Lifecycle {
- private static final Logger logger = LoggerFactory.getLogger(SpringExtensionInjector.class);
-
- public static final String NAME = "spring";
private ApplicationContext context;
@Deprecated
- public static void addApplicationContext(ApplicationContext context) {
-// CONTEXTS.add(context);
-// if (context instanceof ConfigurableApplicationContext) {
-// ((ConfigurableApplicationContext) context).registerShutdownHook();
-// // see https://github.com/apache/dubbo/issues/7093
-// DubboShutdownHook.getDubboShutdownHook().unregister();
-// }
+ public static void addApplicationContext(final ApplicationContext context) {
}
-// @Deprecated
-// public static Set<ApplicationContext> getContexts() {
-// // return contexts;
-// return Collections.emptySet();
-// }
-
-// @Deprecated
-// public static void clearContexts() {
-// //contexts.clear();
-// }
-
- public static SpringExtensionInjector get(ExtensionAccessor extensionAccessor) {
- return (SpringExtensionInjector) extensionAccessor.getExtension(ExtensionInjector.class, NAME);
+ public static SpringExtensionInjector get(final ExtensionAccessor extensionAccessor) {
+ return (SpringExtensionInjector) extensionAccessor.getExtension(ExtensionInjector.class, "spring");
}
public ApplicationContext getContext() {
return context;
}
- public void init(ApplicationContext context) {
+ public void init(final ApplicationContext context) {
this.context = context;
}
@Override
@SuppressWarnings("unchecked")
public <T> T getInstance(Class<T> type, String name) {
-
if (context == null) {
// ignore if spring context is not bound
return null;
@@ -95,24 +71,27 @@ public class SpringExtensionInjector implements ExtensionInjector, Lifecycle {
return null;
}
- private <T> T getOptionalBean(ListableBeanFactory beanFactory, String name, Class<T> type) {
+ private <T> T getOptionalBean(final ListableBeanFactory beanFactory, final String name, final Class<T> type) {
if (StringUtils.isEmpty(name)) {
- String[] beanNamesForType = beanFactory.getBeanNamesForType(type, true, false);
- if (beanNamesForType != null) {
- if (beanNamesForType.length == 1) {
- return beanFactory.getBean(beanNamesForType[0], type);
- } else if (beanNamesForType.length > 1) {
- throw new IllegalStateException("Expect single but found " + beanNamesForType.length + " beans in spring context: " +
- Arrays.toString(beanNamesForType));
- }
- }
- } else {
- if (beanFactory.containsBean(name)) {
- return beanFactory.getBean(name, type);
- }
+ return getOptionalBeanByType(beanFactory, type);
+ }
+ if (beanFactory.containsBean(name)) {
+ return beanFactory.getBean(name, type);
}
return null;
}
+
+ private <T> T getOptionalBeanByType(final ListableBeanFactory beanFactory, final Class<T> type) {
+ String[] beanNamesForType = beanFactory.getBeanNamesForType(type, true, false);
+ if (beanNamesForType == null) {
+ return null;
+ }
+ if (beanNamesForType.length > 1) {
+ throw new IllegalStateException("Expect single but found " + beanNamesForType.length + " beans in spring context: " +
+ Arrays.toString(beanNamesForType));
+ }
+ return beanFactory.getBean(beanNamesForType[0], type);
+ }
@Override
public void initialize() throws IllegalStateException {
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/extension/SpringExtensionInjectorTest.java b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/extension/SpringExtensionInjectorTest.java
index 8514a07c22..8e1cbc20ea 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/extension/SpringExtensionInjectorTest.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/extension/SpringExtensionInjectorTest.java
@@ -38,7 +38,6 @@ import org.springframework.context.annotation.Configuration;
@Configuration
public class SpringExtensionInjectorTest {
-
@BeforeEach
public void init() {
DubboBootstrap.reset();