手记

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

原理上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

0人推荐
随时随地看视频
慕课网APP