This is an automated email from the ASF dual-hosted git repository.

albumenj pushed a commit to branch 3.3
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.3 by this push:
     new d5e1412d52 Changed referenceKeyMap entry value type to 
CopyOnWriteArrayList (#15258)
d5e1412d52 is described below

commit d5e1412d52a68d45e6c46f09c79563343fa71077
Author: zrlw <[email protected]>
AuthorDate: Wed May 7 11:09:46 2025 +0800

    Changed referenceKeyMap entry value type to CopyOnWriteArrayList (#15258)
---
 .../config/spring/reference/ReferenceBeanManager.java   | 17 ++++++++---------
 1 file changed, 8 insertions(+), 9 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 2bdf44362b..eabe50ad32 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
@@ -26,7 +26,6 @@ import org.apache.dubbo.config.spring.ReferenceBean;
 import org.apache.dubbo.config.spring.util.DubboBeanUtils;
 import org.apache.dubbo.rpc.model.ModuleModel;
 
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
@@ -35,6 +34,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 import org.springframework.beans.BeansException;
 import org.springframework.context.ApplicationContext;
@@ -47,7 +47,7 @@ public class ReferenceBeanManager implements 
ApplicationContextAware {
     private final ErrorTypeAwareLogger logger = 
LoggerFactory.getErrorTypeAwareLogger(getClass());
 
     // reference key -> reference bean names
-    private ConcurrentMap<String, List<String>> referenceKeyMap = new 
ConcurrentHashMap<>();
+    private ConcurrentMap<String, CopyOnWriteArrayList<String>> 
referenceKeyMap = new ConcurrentHashMap<>();
 
     // reference alias -> reference bean name
     private ConcurrentMap<String, String> referenceAliasMap = new 
ConcurrentHashMap<>();
@@ -102,8 +102,8 @@ 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) {
+        Set<Map.Entry<String, CopyOnWriteArrayList<String>>> entries = 
referenceKeyMap.entrySet();
+        for (Map.Entry<String, CopyOnWriteArrayList<String>> entry : entries) {
             if (entry.getValue().contains(referenceBeanName)) {
                 return entry.getKey();
             }
@@ -112,10 +112,9 @@ public class ReferenceBeanManager implements 
ApplicationContextAware {
     }
 
     public void registerReferenceKeyAndBeanName(String referenceKey, String 
referenceBeanNameOrAlias) {
-        List<String> list =
-                ConcurrentHashMapUtils.computeIfAbsent(referenceKeyMap, 
referenceKey, (key) -> new ArrayList<>());
-        if (!list.contains(referenceBeanNameOrAlias)) {
-            list.add(referenceBeanNameOrAlias);
+        CopyOnWriteArrayList<String> list = 
ConcurrentHashMapUtils.computeIfAbsent(
+                referenceKeyMap, referenceKey, (key) -> new 
CopyOnWriteArrayList<>());
+        if (list.addIfAbsent(referenceBeanNameOrAlias)) {
             // register bean name as alias
             referenceAliasMap.put(referenceBeanNameOrAlias, list.get(0));
         }
@@ -132,7 +131,7 @@ public class ReferenceBeanManager implements 
ApplicationContextAware {
     }
 
     public List<String> getBeanNamesByKey(String key) {
-        return Collections.unmodifiableList(referenceKeyMap.getOrDefault(key, 
Collections.EMPTY_LIST));
+        return Collections.unmodifiableList(referenceKeyMap.getOrDefault(key, 
new CopyOnWriteArrayList<>()));
     }
 
     public Collection<ReferenceBean> getReferences() {

Reply via email to