Browse Source

缩减代码量

James 2 years ago
parent
commit
980b5150a6
1 changed files with 24 additions and 26 deletions
  1. 24 26
      src/main/java/com/jfinal/ext/proxy/JavassistProxyFactory.java

+ 24 - 26
src/main/java/com/jfinal/ext/proxy/JavassistProxyFactory.java

@@ -16,8 +16,8 @@
 
 
 package com.jfinal.ext.proxy;
 package com.jfinal.ext.proxy;
 
 
+import java.util.HashMap;
 import java.util.Map;
 import java.util.Map;
-import com.jfinal.kit.SyncWriteMap;
 import com.jfinal.proxy.ProxyFactory;
 import com.jfinal.proxy.ProxyFactory;
 import javassist.util.proxy.ProxyObject;
 import javassist.util.proxy.ProxyObject;
 
 
@@ -33,46 +33,39 @@ import javassist.util.proxy.ProxyObject;
  */
  */
 public class JavassistProxyFactory extends ProxyFactory {
 public class JavassistProxyFactory extends ProxyFactory {
     
     
-    protected Map<Class<?>, Class<?>> cache = new SyncWriteMap<>(1024, 0.25F);
+    protected Map<Class<?>, Class<?>> cache = new HashMap<>(1024, 0.25F);
     protected JavassistCallback callback = new JavassistCallback();
     protected JavassistCallback callback = new JavassistCallback();
-	
+    
     @SuppressWarnings("unchecked")
     @SuppressWarnings("unchecked")
     public <T> T get(Class<T> target) {
     public <T> T get(Class<T> target) {
+        // 被 javassist 代理过的类名包含 "_$$_"。不存在代理过两层的情况,仅需调用一次 getSuperclass() 即可
+        if (target.getName().indexOf("_$$_") > -1) {
+            target = (Class<T>) target.getSuperclass();
+        }
+        
         try {
         try {
-            // 被 javassist 代理过的类名包含 "_$$_"。不存在代理过两层的情况,仅需调用一次 getSuperclass() 即可
-            if (target.getName().indexOf("_$$_") > -1) {
-                target = (Class<T>) target.getSuperclass();
-            }
-            
-            Object ret;
             Class<T> clazz = (Class<T>) cache.get(target);
             Class<T> clazz = (Class<T>) cache.get(target);
-            if (clazz != null) {
-                ret = (T) clazz.newInstance();
-            } else {
-                ret = doGet(target);
+            if (clazz == null) {
+                clazz = getProxyClass(target);
             }
             }
             
             
+            T ret = clazz.newInstance();
             ((ProxyObject) ret).setHandler(callback);
             ((ProxyObject) ret).setHandler(callback);
-            return (T) ret;
+            return ret;
+            
         } catch (ReflectiveOperationException e) {
         } catch (ReflectiveOperationException e) {
             throw new RuntimeException(e);
             throw new RuntimeException(e);
         }
         }
     }
     }
     
     
     @SuppressWarnings("unchecked")
     @SuppressWarnings("unchecked")
-    protected <T> T doGet(Class<T> target) throws ReflectiveOperationException {
+    protected <T> Class<T> getProxyClass(Class<T> target) throws ReflectiveOperationException {
         synchronized (target) {
         synchronized (target) {
-            Class<T> clazz = (Class<T>) cache.get(target);
-            if (clazz != null) {
-                return (T) clazz.newInstance();
-            }
-            
-            javassist.util.proxy.ProxyFactory factory = new javassist.util.proxy.ProxyFactory();
-            factory.setSuperclass(target);
-            clazz = (Class<T>) factory.createClass();
-            T ret = clazz.newInstance();
-            cache.put(target, clazz);
-            return ret;
+            return (Class<T>) cache.computeIfAbsent(target, key -> {
+                javassist.util.proxy.ProxyFactory factory = new javassist.util.proxy.ProxyFactory();
+                factory.setSuperclass(key);
+                return factory.createClass();
+            });
         }
         }
 	}
 	}
 }
 }
@@ -82,3 +75,8 @@ public class JavassistProxyFactory extends ProxyFactory {
 
 
 
 
 
 
+
+
+
+
+