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(); } }
就是這樣了,非常簡單。
原文連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1834/viewspace-2805651/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PHP 反射之動態代理PHP反射
- java 反射和動態代理Java反射
- Java動態代理和反射機制Java反射
- 深入理解 Java 反射和動態代理Java反射
- 深入淺出MyBatis:反射和動態代理MyBatis反射
- java反射之動態代理學習筆記Java反射筆記
- java 動態代理簡單使用Java
- 動態代理竟然如此簡單!
- 反射,註解,動態代理,依賴注入控制反轉反射依賴注入
- 模擬簡單的動態代理
- 死磕java底層(三)—反射、動態代理和註解Java反射
- Java代理(jdk靜態代理、動態代理和cglib動態代理)JavaJDKCGLib
- Java提高班(六)反射和動態代理(JDK Proxy和Cglib)Java反射JDKCGLib
- 代理模式詳解:靜態代理、JDK動態代理與Cglib動態代理模式JDKCGLib
- 靜態代理和動態代理
- JAVA 靜態代理 & 動態代理Java
- 代理模式 - 動態代理模式
- 動態代理
- 使用Java和Google Guava簡化開發JavaGoGuava
- 動態ip代理的三種使用方法
- 3.靜態代理&動態代理&CGlibCGLib
- AOP之靜態代理VS動態代理
- spring aop原理 JDK動態代理和CGLIB動態代理SpringJDKCGLib
- JDK動態代理JDK
- CGLib 動態代理CGLib
- spring動態代理Spring
- java動態代理Java
- Spring 動態代理Spring
- 00024.06 反射:反射的應用2:動態建立物件反射物件
- java動態代理動態在哪裡?Java
- JAVA基礎加強篇12——單元測試、反射、註解、動態代理Java反射
- Java中的靜態代理和動態代理Java
- 靜態代理、動態代理與Mybatis的理解MyBatis
- 輕鬆理解 Java 靜態代理/動態代理Java
- JDK動態代理和CGLib代理JDKCGLib
- JDK動態代理和 CGLIB 代理JDKCGLib
- Python爬蟲動態ip代理防止被封的方法Python爬蟲
- Protobuf_動態訊息-反射反射