cglib动态代理使用ASM字节码技术动态生成代理类,因此效率相比反射的jdk动态代理更高。下面为示例。
一、目标类,被代理类的本身public class Target { public void method1() { System.out.println("method1 running ..."); } public void method2() { System.out.println("method2 running ..."); } public int method3(Integer i) { System.out.println("method3 running ..."); return i; } }二、代理类,生成目标类的子类
import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; import java.lang.reflect.Method; public class TargetProxy { static三、测试代理类Object getProxy(T t) { Enhancer en = new Enhancer(); //帮我们生成代理对象 en.setSuperclass(t.getClass());//设置要代理的目标类 en.setCallback(new MethodInterceptor() {//代理过程 @Override public Object intercept(Object object, Method method, Object[] args, MethodProxy methodProxy) throws Throwable { System.out.println("执行方法前。。。"); //调用原有方法 Object invoke = methodProxy.invokeSuper(object, args); // Object invoke = method.invoke(t, args);// 作用等同与上面。 System.out.println("执行方法后。。。"); return invoke; } }); return en.create(); } }
public static void main(String[] args) { Target target = (Target) TargetProxy.getProxy(new Target()); target.method1(); }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)