继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

guava反射:Reflection.newProxy方法简化动态代理

喵喔喔
关注TA
已关注
手记 514
粉丝 103
获赞 606

原理上Google Guava的动态代理也是使用JDK的动态代理,这是做了封装,更加简便。另外一点是能够很好的检查需要代理的对象必须拥有接口。使用Class类的isInterface()来做检查。

下面我们先比较一下jdk动态代理和guava动态代理的实现:

JDK动态代理:

Foo foo = (Foo) Proxy.newProxyInstance(       Foo.class.getClassLoader(),       new Class<?>[] {Foo.class},      invocationHandler);

Guava动态代理:

Foo foo = Reflection.newProxy(Foo.class, invocationHandler);

可以看出使用Guava的方式更简洁一些,下面我们用一个具体的例子来看下:

package cn.outofmemory.guava.reflect; import com.google.common.reflect.Reflection; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /**  * Created by outofmemory.cn  on 2014/7/31.  */ public class DynamicProxyDemo {     public static void main(String[] args) {         InvocationHandler invocationHandler = new MyInvocationHandler();         // Guava Dynamic Proxy implement         IFoo foo = Reflection.newProxy(IFoo.class, invocationHandler);         foo.doSomething();         //jdk Dynamic proxy implement         IFoo jdkFoo = (IFoo) Proxy.newProxyInstance(                 IFoo.class.getClassLoader(),                 new Class<?>[]{IFoo.class},                 invocationHandler);         jdkFoo.doSomething();     }     public static class MyInvocationHandler implements InvocationHandler{     public Object invoke(Object proxy, Method method, Object[] args)                 throws Throwable {             System.out.println("proxy println something");             return null;         }     }     public static interface IFoo {         void doSomething();     } }

就是这样了,非常简单。

原文链接:http://outofmemory.cn/java/guava/reflect/Reflection-simplify-Dynamic-proxy

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP