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();