Browse Source

改用 synchronized(this) 结合 HashMap 支持并发写

James 2 years ago
parent
commit
8becd2a290
1 changed files with 9 additions and 7 deletions
  1. 9 7
      src/main/java/com/jfinal/ext/proxy/JavassistProxyFactory.java

+ 9 - 7
src/main/java/com/jfinal/ext/proxy/JavassistProxyFactory.java

@@ -16,7 +16,7 @@
 
 package com.jfinal.ext.proxy;
 
-import com.jfinal.kit.SyncWriteMap;
+import java.util.HashMap;
 import com.jfinal.proxy.ProxyFactory;
 import javassist.util.proxy.ProxyObject;
 
@@ -32,7 +32,7 @@ import javassist.util.proxy.ProxyObject;
  */
 public class JavassistProxyFactory extends ProxyFactory {
     
-    protected SyncWriteMap<Class<?>, Class<?>> cache = new SyncWriteMap<>(1024, 0.25F);
+    protected HashMap<Class<?>, Class<?>> cache = new HashMap<>(1024, 0.25F);
     protected JavassistCallback callback = new JavassistCallback();
     
     @SuppressWarnings("unchecked")
@@ -59,11 +59,13 @@ public class JavassistProxyFactory extends ProxyFactory {
     
     @SuppressWarnings("unchecked")
     protected <T> Class<T> getProxyClass(Class<T> target) throws ReflectiveOperationException {
-        return (Class<T>) cache.computeIfAbsent(target, key -> {
-            javassist.util.proxy.ProxyFactory factory = new javassist.util.proxy.ProxyFactory();
-            factory.setSuperclass(key);
-            return factory.createClass();
-        });
+        synchronized(this) {
+            return (Class<T>) cache.computeIfAbsent(target, key -> {
+                javassist.util.proxy.ProxyFactory factory = new javassist.util.proxy.ProxyFactory();
+                factory.setSuperclass(key);
+                return factory.createClass();
+            });
+        }
     }
 }