diff --git a/jetcache-anno/src/main/java/com/alicp/jetcache/anno/config/CacheAnnotationParser.java b/jetcache-anno/src/main/java/com/alicp/jetcache/anno/config/CacheAnnotationParser.java
index db356e383..6ba6149d3 100644
--- a/jetcache-anno/src/main/java/com/alicp/jetcache/anno/config/CacheAnnotationParser.java
+++ b/jetcache-anno/src/main/java/com/alicp/jetcache/anno/config/CacheAnnotationParser.java
@@ -19,19 +19,27 @@
import org.w3c.dom.Element;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.locks.ReentrantLock;
/**
* @author huangli
*/
public class CacheAnnotationParser implements BeanDefinitionParser {
+ private final ReentrantLock reentrantLock = new ReentrantLock();
+
@Override
public BeanDefinition parse(Element element, ParserContext parserContext) {
- doParse(element, parserContext);
+ reentrantLock.lock();
+ try {
+ doParse(element, parserContext);
+ }finally {
+ reentrantLock.unlock();
+ }
return null;
}
- private synchronized void doParse(Element element, ParserContext parserContext) {
+ private void doParse(Element element, ParserContext parserContext) {
String[] basePackages = StringUtils.tokenizeToStringArray(element.getAttribute("base-package"), ",; \t\n");
AopNamespaceUtils.registerAutoProxyCreatorIfNecessary(parserContext, element);
if (!parserContext.getRegistry().containsBeanDefinition(CacheAdvisor.CACHE_ADVISOR_BEAN_NAME)) {
diff --git a/jetcache-anno/src/main/java/com/alicp/jetcache/anno/field/CreateCacheAnnotationBeanPostProcessor.java b/jetcache-anno/src/main/java/com/alicp/jetcache/anno/field/CreateCacheAnnotationBeanPostProcessor.java
index 169faf7ae..92640ec87 100644
--- a/jetcache-anno/src/main/java/com/alicp/jetcache/anno/field/CreateCacheAnnotationBeanPostProcessor.java
+++ b/jetcache-anno/src/main/java/com/alicp/jetcache/anno/field/CreateCacheAnnotationBeanPostProcessor.java
@@ -22,6 +22,7 @@
import java.util.LinkedList;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.locks.ReentrantLock;
/**
* Created on 2016/12/9.
@@ -38,6 +39,7 @@ public class CreateCacheAnnotationBeanPostProcessor extends AutowiredAnnotationB
private ConfigurableListableBeanFactory beanFactory;
private final Map injectionMetadataCache = new ConcurrentHashMap();
+ private final ReentrantLock reentrantLock = new ReentrantLock();
@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
@@ -77,7 +79,8 @@ private InjectionMetadata findAutowiringMetadata(String beanName, Class> clazz
// Quick check on the concurrent map first, with minimal locking.
InjectionMetadata metadata = this.injectionMetadataCache.get(cacheKey);
if (InjectionMetadata.needsRefresh(metadata, clazz)) {
- synchronized (this.injectionMetadataCache) {
+ reentrantLock.lock();
+ try{
metadata = this.injectionMetadataCache.get(cacheKey);
if (InjectionMetadata.needsRefresh(metadata, clazz)) {
if (metadata != null) {
@@ -91,6 +94,8 @@ private InjectionMetadata findAutowiringMetadata(String beanName, Class> clazz
"] for autowiring metadata: could not find class that it depends on", err);
}
}
+ }finally {
+ reentrantLock.unlock();
}
}
return metadata;
diff --git a/jetcache-core/src/main/java/com/alicp/jetcache/AbstractCache.java b/jetcache-core/src/main/java/com/alicp/jetcache/AbstractCache.java
index 800ea231b..a24c28978 100644
--- a/jetcache-core/src/main/java/com/alicp/jetcache/AbstractCache.java
+++ b/jetcache-core/src/main/java/com/alicp/jetcache/AbstractCache.java
@@ -21,6 +21,7 @@
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.ReentrantLock;
import java.util.function.Consumer;
import java.util.function.Function;
@@ -36,13 +37,17 @@ public abstract class AbstractCache implements Cache {
private volatile ConcurrentHashMap