You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by li...@apache.org on 2021/11/25 06:20:16 UTC

[dubbo] 30/45: extract DubboConfigBeanInitializer

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

liujun pushed a commit to branch release/3.0.14-rpccontext-bugfix
in repository https://gitbox.apache.org/repos/asf/dubbo.git

commit 9d4e7dab71e7fc2222baeaaae42e1d2183673d0b
Author: 赫炎 <de...@alibaba-inc.com>
AuthorDate: Wed Dec 9 17:11:51 2020 +0800

    extract DubboConfigBeanInitializer
---
 .../config/spring/DubboConfigBeanInitializer.java  | 32 ++++++++++++++++++++++
 .../apache/dubbo/config/spring/ReferenceBean.java  |  3 +-
 .../config/DubboConfigBeanPostProcessor.java       | 20 ++++++--------
 3 files changed, 42 insertions(+), 13 deletions(-)

diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/DubboConfigBeanInitializer.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/DubboConfigBeanInitializer.java
new file mode 100644
index 0000000..94df8e4
--- /dev/null
+++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/DubboConfigBeanInitializer.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.dubbo.config.spring;
+
+/**
+ * Dubbo config beans initializer
+ */
+public abstract class DubboConfigBeanInitializer {
+    private static volatile boolean loaded;
+
+    public static boolean isLoaded() {
+        return loaded;
+    }
+
+    public static void setLoaded(boolean loaded) {
+        DubboConfigBeanInitializer.loaded = loaded;
+    }
+}
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ReferenceBean.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ReferenceBean.java
index 4ca3a84..755d581 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ReferenceBean.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ReferenceBean.java
@@ -18,7 +18,6 @@ package org.apache.dubbo.config.spring;
 
 import org.apache.dubbo.config.ReferenceConfig;
 import org.apache.dubbo.config.annotation.Reference;
-import org.apache.dubbo.config.spring.beans.factory.config.DubboConfigBeanPostProcessor;
 import org.apache.dubbo.config.spring.extension.SpringExtensionFactory;
 import org.apache.dubbo.config.support.Parameter;
 import org.apache.dubbo.config.utils.ConfigValidationUtils;
@@ -70,7 +69,7 @@ public class ReferenceBean<T> extends ReferenceConfig<T> implements FactoryBean,
     @Override
     public void afterPropertiesSet() throws Exception {
         // Abort initializing when config beans are not loaded
-        if (!DubboConfigBeanPostProcessor.isConfigBeansLoaded()) {
+        if (!DubboConfigBeanInitializer.isLoaded()) {
             throw new IllegalStateException("dubbo config beans are not loaded");
         }
 
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/config/DubboConfigBeanPostProcessor.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/config/DubboConfigBeanPostProcessor.java
index acafa2a..d19511c 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/config/DubboConfigBeanPostProcessor.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/config/DubboConfigBeanPostProcessor.java
@@ -29,6 +29,7 @@ import org.apache.dubbo.config.ProviderConfig;
 import org.apache.dubbo.config.RegistryConfig;
 import org.apache.dubbo.config.SslConfig;
 import org.apache.dubbo.config.spring.ConfigCenterBean;
+import org.apache.dubbo.config.spring.DubboConfigBeanInitializer;
 import org.apache.dubbo.config.spring.ReferenceBean;
 import org.apache.dubbo.rpc.model.ApplicationModel;
 import org.springframework.beans.BeansException;
@@ -42,8 +43,6 @@ import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProce
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContextAware;
 
-import java.util.HashMap;
-import java.util.Map;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import static com.alibaba.spring.util.BeanRegistrar.hasAlias;
@@ -67,7 +66,6 @@ public class DubboConfigBeanPostProcessor implements BeanDefinitionRegistryPostP
     private BeanDefinitionRegistry registry;
     private ApplicationContext applicationContext;
     private static AtomicBoolean configBeansLoading = new AtomicBoolean();
-    private static volatile boolean configBeansLoaded;
     private AbstractBeanFactory beanFactory;
 
     @Override
@@ -82,8 +80,8 @@ public class DubboConfigBeanPostProcessor implements BeanDefinitionRegistryPostP
             beanFactory = (AbstractBeanFactory) registry;
         }
 
-        // disable dubbo reference beans from registry, avoiding useless early initialization.
-        // dubbo reference beans will be enable again after dubbo core framework is initialized
+        // Disable dubbo reference bean definitions in registry, avoiding useless early initialization.
+        // Dubbo reference bean definitions will be enable again after dubbo core framework is initialized
         disableReferenceBeans(registry);
     }
 
@@ -97,9 +95,10 @@ public class DubboConfigBeanPostProcessor implements BeanDefinitionRegistryPostP
         if (configBeansLoading.compareAndSet(false, true)) {
             // Initializes Dubbo's Config Beans before @Reference bean autowiring
             prepareDubboConfigBeans();
-            // enable dubbo reference beans
+            // Enable dubbo reference beans for autowiring
             enableReferenceBeans(registry);
-            configBeansLoaded = true;
+            // Mark config beans are loaded
+            DubboConfigBeanInitializer.setLoaded(true);
         }
 
         // DO NOTHING
@@ -124,6 +123,7 @@ public class DubboConfigBeanPostProcessor implements BeanDefinitionRegistryPostP
             BeanDefinition beanDefinition = registry.getBeanDefinition(beanName);
             if (className.equals(beanDefinition.getBeanClassName())) {
                 ((AbstractBeanDefinition)beanDefinition).setAbstract(false);
+                //set abstractFlag of mergedBeanDefinitions
                 if (this.beanFactory != null) {
                     BeanDefinition mergedBeanDefinition = this.beanFactory.getMergedBeanDefinition(beanName);
                     if (mergedBeanDefinition != null) {
@@ -135,11 +135,12 @@ public class DubboConfigBeanPostProcessor implements BeanDefinitionRegistryPostP
     }
 
     private void prepareDubboConfigBeans() {
+
+        //load base config beans
         ApplicationModel.getEnvironment();
         ApplicationModel.getServiceRepository();
         ApplicationModel.getConfigManager();
 
-        // Refactor 2.7.9
         final boolean includeNonSingletons = true;
         final boolean allowEagerInit = false;
         beansOfTypeIncludingAncestors(applicationContext, ApplicationConfig.class, includeNonSingletons, allowEagerInit);
@@ -191,7 +192,4 @@ public class DubboConfigBeanPostProcessor implements BeanDefinitionRegistryPostP
         ApplicationModel.getConfigManager().addConfig(configBean);
     }
 
-    public static boolean isConfigBeansLoaded() {
-        return configBeansLoaded;
-    }
 }