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;
- }
}