This is an automated email from the ASF dual-hosted git repository.
liujun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/master by this push:
new c2c6cdb init application scope configs before start referencing.
c2c6cdb is described below
commit c2c6cdb1c47df56a5222915a055fac3e4c32ca59
Author: ken.lj <[email protected]>
AuthorDate: Thu Oct 31 11:08:12 2019 +0800
init application scope configs before start referencing.
---
.../ReferenceAnnotationBeanPostProcessor.java | 37 ++++++++++++++++++++++
1 file changed, 37 insertions(+)
diff --git
a/dubbo-bootstrap/dubbo-bootstrap-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/ReferenceAnnotationBeanPostProcessor.java
b/dubbo-bootstrap/dubbo-bootstrap-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/ReferenceAnnotationBeanPostProcessor.java
index e347c9e..897bb8a 100644
---
a/dubbo-bootstrap/dubbo-bootstrap-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/ReferenceAnnotationBeanPostProcessor.java
+++
b/dubbo-bootstrap/dubbo-bootstrap-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/ReferenceAnnotationBeanPostProcessor.java
@@ -17,8 +17,18 @@
package org.apache.dubbo.config.spring.beans.factory.annotation;
import org.apache.dubbo.bootstrap.DubboBootstrap;
+import org.apache.dubbo.config.ApplicationConfig;
+import org.apache.dubbo.config.ConsumerConfig;
+import org.apache.dubbo.config.MetadataReportConfig;
+import org.apache.dubbo.config.MetricsConfig;
+import org.apache.dubbo.config.ModuleConfig;
+import org.apache.dubbo.config.MonitorConfig;
+import org.apache.dubbo.config.ProtocolConfig;
+import org.apache.dubbo.config.ProviderConfig;
+import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.config.annotation.Reference;
import org.apache.dubbo.config.annotation.Service;
+import org.apache.dubbo.config.spring.ConfigCenterBean;
import org.apache.dubbo.config.spring.ReferenceBean;
import org.apache.dubbo.config.spring.ServiceBean;
import org.apache.dubbo.config.spring.context.event.ServiceBeanExportedEvent;
@@ -49,6 +59,7 @@ import java.util.concurrent.ConcurrentMap;
import static java.lang.reflect.Proxy.newProxyInstance;
import static
org.apache.dubbo.config.spring.beans.factory.annotation.ServiceBeanNameBuilder.create;
import static org.apache.dubbo.config.spring.util.AnnotationUtils.getAttribute;
+import static
org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors;
import static org.springframework.util.StringUtils.hasText;
/**
@@ -84,6 +95,8 @@ public class ReferenceAnnotationBeanPostProcessor extends
AnnotationInjectedBean
private ApplicationContext applicationContext;
+ private volatile boolean preparedDubboConfigBeans;
+
/**
* To support the legacy annotation that is
@com.alibaba.dubbo.config.annotation.Reference since 2.7.3
*/
@@ -91,6 +104,29 @@ public class ReferenceAnnotationBeanPostProcessor extends
AnnotationInjectedBean
super(Reference.class,
com.alibaba.dubbo.config.annotation.Reference.class);
}
+ private void prepareDubboConfigBeans() {
+
+ if (preparedDubboConfigBeans) {
+ return;
+ }
+
+ preparedDubboConfigBeans = true;
+
+ ConfigurableListableBeanFactory beanFactory = getBeanFactory();
+
+ // Initializes there Dubbo's Config Beans before @Reference bean
autowiring
+ beansOfTypeIncludingAncestors(beanFactory, ApplicationConfig.class);
+ beansOfTypeIncludingAncestors(beanFactory, ModuleConfig.class);
+ beansOfTypeIncludingAncestors(beanFactory, RegistryConfig.class);
+ beansOfTypeIncludingAncestors(beanFactory, ProtocolConfig.class);
+ beansOfTypeIncludingAncestors(beanFactory, MonitorConfig.class);
+ beansOfTypeIncludingAncestors(beanFactory, ProviderConfig.class);
+ beansOfTypeIncludingAncestors(beanFactory, ConsumerConfig.class);
+ beansOfTypeIncludingAncestors(beanFactory, ConfigCenterBean.class);
+ beansOfTypeIncludingAncestors(beanFactory, MetadataReportConfig.class);
+ beansOfTypeIncludingAncestors(beanFactory, MetricsConfig.class);
+ }
+
/**
* Gets all beans of {@link ReferenceBean}
*
@@ -124,6 +160,7 @@ public class ReferenceAnnotationBeanPostProcessor extends
AnnotationInjectedBean
@Override
protected Object doGetInjectedBean(AnnotationAttributes attributes, Object
bean, String beanName, Class<?> injectedType,
InjectionMetadata.InjectedElement
injectedElement) throws Exception {
+ prepareDubboConfigBeans();
/**
* The name of bean that annotated Dubbo's {@link Service @Service} in
local Spring {@link ApplicationContext}