读书人

兑现动态代理的两种方式

发布时间: 2012-07-23 09:42:20 作者: rapoo

实现动态代理的两种方式
第一种使用jdk实现
第二种使用cglib实现
代码写的比较飘逸,娱乐与教学并存。

jdk实现动态代理(接口)

public interface 打架接口 {public void 开打();}


public class 打架 implements 打架接口 {@Overridepublic void 开打() {System.out.println("威哥 打出绝技 降龙十八掌。。。");}}


import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class 打架小帮手 implements InvocationHandler{private Object delegate;public Object binder(Object delegate) {               this.delegate = delegate;          return Proxy.newProxyInstance(delegate.getClass().getClassLoader(), delegate.getClass().getInterfaces(), this);      }   @Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("小弟们 冲啊。。。");Object invoke = method.invoke(delegate, args);System.out.println("哥在江湖又留下了一段传说。。。");return invoke;}}


import java.lang.reflect.InvocationHandler;import java.lang.reflect.Proxy;public class 威哥 {public static void main(String[] args) {打架接口 打架接口 = (打架接口) new 打架小帮手().binder(new 打架());打架接口.开打();}//   我要去打架//   1   叫上小弟//   2  打架//   3 哥又留下一段传说}


cglib实现动态代理

public class 打架 {public void 开打() {System.out.println("威哥 打出绝技 降龙十八掌。。。");}}


import java.lang.reflect.Method;import net.sf.cglib.proxy.Enhancer;import net.sf.cglib.proxy.MethodInterceptor;import net.sf.cglib.proxy.MethodProxy;public class 打架小帮手  implements MethodInterceptor {@Overridepublic Object intercept(Object object, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {   System.out.println("小弟们 冲啊。。。");Object result = methodProxy.invokeSuper(object,args);   System.out.println("哥在江湖又留下了一段传说。。。");return result;   }public Object createProxy(Class targetClass){   Enhancer enhancer = new Enhancer();   enhancer.setSuperclass(targetClass);   enhancer.setCallback(new 打架小帮手());   return enhancer.create();   } }


public class 威哥 {public static void main(String rags[]){   打架 打架 = new 打架();打架小帮手 帮手 = new 打架小帮手();打架 打架代理 = (打架) 帮手.createProxy(打架.getClass());打架代理.开打();}}

读书人网 >开源软件

热点推荐