From f0c73b6346d5c94987290157dd2ee87a718b693c Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Mon, 12 Nov 2018 16:01:21 +0100 Subject: [PATCH] DATACMNS-1415 - Use thread-safe caching in SpelAwareProxyProjectionFactory. We now use ConcurrentHashMap as type instead of HashMap to properly synchronize concurrent updates to missing cache elements. The previously used HashMap was not thread-safe so concurrent modifications resulted in ConcurrentModificationException. --- .../data/projection/SpelAwareProxyProjectionFactory.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/springframework/data/projection/SpelAwareProxyProjectionFactory.java b/src/main/java/org/springframework/data/projection/SpelAwareProxyProjectionFactory.java index b9d0968c0..4e10c0ab9 100644 --- a/src/main/java/org/springframework/data/projection/SpelAwareProxyProjectionFactory.java +++ b/src/main/java/org/springframework/data/projection/SpelAwareProxyProjectionFactory.java @@ -17,8 +17,8 @@ package org.springframework.data.projection; import java.beans.PropertyDescriptor; import java.lang.reflect.Method; -import java.util.HashMap; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import org.aopalliance.intercept.MethodInterceptor; import org.springframework.beans.BeansException; @@ -41,7 +41,7 @@ import org.springframework.util.ReflectionUtils; */ public class SpelAwareProxyProjectionFactory extends ProxyProjectionFactory implements BeanFactoryAware { - private final Map, Boolean> typeCache = new HashMap, Boolean>(); + private final Map, Boolean> typeCache = new ConcurrentHashMap, Boolean>(); private final SpelExpressionParser parser = new SpelExpressionParser(); private BeanFactory beanFactory;