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) {

Reply via email to