package cglib; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; import org.junit.Test; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; public class CglibTest { @Test public void enhancerTest(){ // 被代理的集合 ArrayList<String> target = new ArrayList<>(); // 创建增强类 Enhancer en = new Enhancer(); // 设置被继承的父类 en.setSuperclass(ArrayList.class); // 设置方法拦截器 en.setCallback(new MyMethodInterceptor<String>(target)); // 创建动态代理对象 ArrayList<String> list = (ArrayList<String>) en.create(); list.add("cch"); list.add("666"); System.out.println(list.get(0)); System.out.println(list.getClass().getName()); } } // Object intercept(Object var1, Method var2, Object[] var3, MethodProxy var4) throws Throwable; class MyMethodInterceptor<E> implements MethodInterceptor{ private List<E> target; public MyMethodInterceptor(List<E> target){ this.target = target; } @Override public Object intercept(Object proxyObject, // var1 - 代理对象 Method method, // var2 - 被调用的方法 Object[] args, // var3 - 调用方法时候传递的参数 MethodProxy methodProxy // var4 - 代理方法(包继承的超类型方法) ) throws Throwable { // 正在调用的方法 System.out.println("正在调用的方法:" + method); synchronized (proxyObject){ Object result = method.invoke(target, args); System.out.println("返回值:" + result); return result; } } }
手写Cglib动态代理
最新推荐文章于 2022-06-17 09:53:25 发布