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 6822b2301c Try to get it from the cache before generating the
referenceKey (#10173)
6822b2301c is described below
commit 6822b2301c3d58d4d31e631f187e1d7965b6006d
Author: 灼华 <[email protected]>
AuthorDate: Mon Aug 15 10:04:03 2022 +0800
Try to get it from the cache before generating the referenceKey (#10173)
---
.../spring/reference/ReferenceBeanManager.java | 23 +++++++++++++++++++---
1 file changed, 20 insertions(+), 3 deletions(-)
diff --git
a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/reference/ReferenceBeanManager.java
b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/reference/ReferenceBeanManager.java
index 64d2a1b7d9..d565a48d68 100644
---
a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/reference/ReferenceBeanManager.java
+++
b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/reference/ReferenceBeanManager.java
@@ -17,6 +17,7 @@
package org.apache.dubbo.config.spring.reference;
import org.apache.dubbo.common.utils.Assert;
+import org.apache.dubbo.common.utils.StringUtils;
import org.apache.dubbo.config.ReferenceConfig;
import org.apache.dubbo.config.spring.ReferenceBean;
import org.apache.dubbo.config.spring.util.DubboBeanUtils;
@@ -34,6 +35,7 @@ import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
@@ -67,8 +69,10 @@ public class ReferenceBeanManager implements
ApplicationContextAware {
" the BeanPostProcessor has not been loaded at this time,
which may cause abnormalities in some components (such as seata): " +
referenceBeanName + " = " +
ReferenceBeanSupport.generateReferenceKey(referenceBean, applicationContext));
}
-
- String referenceKey =
ReferenceBeanSupport.generateReferenceKey(referenceBean, applicationContext);
+ String referenceKey = getReferenceKeyByBeanName(referenceBeanName);
+ if (StringUtils.isEmpty(referenceKey)) {
+ referenceKey =
ReferenceBeanSupport.generateReferenceKey(referenceBean, applicationContext);
+ }
ReferenceBean oldReferenceBean =
referenceBeanMap.get(referenceBeanName);
if (oldReferenceBean != null) {
if (referenceBean != oldReferenceBean) {
@@ -88,6 +92,16 @@ public class ReferenceBeanManager implements
ApplicationContextAware {
}
}
+ private String getReferenceKeyByBeanName(String referenceBeanName){
+ Set<Map.Entry<String, List<String>>> entries =
referenceKeyMap.entrySet();
+ for (Map.Entry<String, List<String>> entry : entries) {
+ if (entry.getValue().contains(referenceBeanName)) {
+ return entry.getKey();
+ }
+ }
+ return null;
+ }
+
public void registerReferenceKeyAndBeanName(String referenceKey, String
referenceBeanNameOrAlias) {
List<String> list = referenceKeyMap.computeIfAbsent(referenceKey,
(key) -> new ArrayList<>());
if (!list.contains(referenceBeanNameOrAlias)) {
@@ -148,7 +162,10 @@ public class ReferenceBeanManager implements
ApplicationContextAware {
// TOTO check same unique service name but difference reference key
(means difference attributes).
// reference key
- String referenceKey =
ReferenceBeanSupport.generateReferenceKey(referenceBean, applicationContext);
+ String referenceKey = getReferenceKeyByBeanName(referenceBean.getId());
+ if (StringUtils.isEmpty(referenceKey)) {
+ referenceKey =
ReferenceBeanSupport.generateReferenceKey(referenceBean, applicationContext);
+ }
ReferenceConfig referenceConfig = referenceConfigMap.get(referenceKey);
if (referenceConfig == null) {