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/08/15 02:04:24 UTC

[dubbo] branch 3.0 updated: Try to get it from the cache before generating the referenceKey (#10173)

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: 灼华 <43...@users.noreply.github.com>
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) {