首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

兑现动态代理的两种方式

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

实现动态代理的两种方式
第一种使用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());打架代理.开打();}}

热点排行