ソースを参照

支持对已经代理过的类再次代理

James 2 年 前
コミット
b6c2e1ea48
1 ファイル変更4 行追加0 行削除
  1. 4 0
      src/main/java/com/jfinal/ext/proxy/CglibProxyFactory.java

+ 4 - 0
src/main/java/com/jfinal/ext/proxy/CglibProxyFactory.java

@@ -32,6 +32,10 @@ public class CglibProxyFactory extends ProxyFactory {
 	
 	
 	@SuppressWarnings("unchecked")
 	@SuppressWarnings("unchecked")
 	public <T> T get(Class<T> target) {
 	public <T> T get(Class<T> target) {
+	    // 被 cglib 代理过的的类名包含 "$$EnhancerBy"。仅需调用一次 getSuperclass() 即可
+        if (target.getName().indexOf("$$EnhancerBy") > -1) {
+            target =(Class<T>) target.getSuperclass();
+        }
 		return (T)net.sf.cglib.proxy.Enhancer.create(target, new CglibCallback());
 		return (T)net.sf.cglib.proxy.Enhancer.create(target, new CglibCallback());
 	}
 	}
 }
 }