CachedIntrospectionResults uses putIfAbsent where possible (for minimal write locking)

Issue: SPR-12102
This commit is contained in:
Juergen Hoeller
2014-08-19 22:50:54 +02:00
parent 1ca0460534
commit 781a6d289e

View File

@@ -188,13 +188,13 @@ public class CachedIntrospectionResults {
results = new CachedIntrospectionResults(beanClass);
if (ClassUtils.isCacheSafe(beanClass, CachedIntrospectionResults.class.getClassLoader()) ||
isClassLoaderAccepted(beanClass.getClassLoader())) {
strongClassCache.put(beanClass, results);
strongClassCache.putIfAbsent(beanClass, results);
}
else {
if (logger.isDebugEnabled()) {
logger.debug("Not strongly caching class [" + beanClass.getName() + "] because it is not cache-safe");
}
softClassCache.put(beanClass, results);
softClassCache.putIfAbsent(beanClass, results);
}
return results;
}
@@ -295,7 +295,7 @@ public class CachedIntrospectionResults {
"; editor [" + pd.getPropertyEditorClass().getName() + "]" : ""));
}
pd = buildGenericTypeAwarePropertyDescriptor(beanClass, pd);
this.propertyDescriptorCache.put(pd.getName(), pd);
this.propertyDescriptorCache.putIfAbsent(pd.getName(), pd);
}
this.typeDescriptorCache = new ConcurrentHashMap<PropertyDescriptor, TypeDescriptor>();
@@ -348,7 +348,7 @@ public class CachedIntrospectionResults {
}
void addTypeDescriptor(PropertyDescriptor pd, TypeDescriptor td) {
this.typeDescriptorCache.put(pd, td);
this.typeDescriptorCache.putIfAbsent(pd, td);
}
TypeDescriptor getTypeDescriptor(PropertyDescriptor pd) {