Java动态代理
来源:互联网 发布:思迅软件合作伙伴社区 编辑:程序博客网 时间:2024/05/22 05:11
看java核心技术的时候,感觉动态代理没有理解好,于是查找了一些文档,写下这篇文章
首先,你需要熟悉代理模式,至少是静态代理,才可以很快理解这篇文章。
Dynamic Proxy是在运行时生成的class,在生成它时你必须提供一 组interface给它,然后该class就宣称它实现了这些 interface。你当然可以把该class的实 例当作这些interface中的任何一个来用。当然啦,这个Dynamic Proxy其实就是一个Proxy, 它不会替你作实质性的工作,在生成它的实例时你必须提供一个handler,由它接管实际的工 作。
A dynamic proxy class is a class that implements a list of interfaces specified at runtime such that a method invocation through one of the interfaces on an instance of the class will be encoded and dispatched to another object through a uniform interface. It can be used to create a type-safe proxy object for a list of interfaces without requiring pre-generation of the proxy class. Dynamic proxy classes are useful to an application or library that needs to provide type-safe reflective dispatch of invocations on objects that present interface APIs.
通过动态代理技术,可以很方便地实现类似Spring AOP一样的方法拦截器
public interface Foo { Object bar(Object obj) throws BazException;}public class FooImpl implements Foo { Object bar(Object obj) throws BazException { // ... }}public class DebugProxy implements java.lang.reflect.InvocationHandler { private Object obj; public static Object newInstance(Object obj) { return java.lang.reflect.Proxy.newProxyInstance( obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), new DebugProxy(obj)); } private DebugProxy(Object obj) { this.obj = obj; } public Object invoke(Object proxy, Method m, Object[] args) throws Throwable { Object result; try { System.out.println("before method " + m.getName()); result = m.invoke(obj, args); } catch (InvocationTargetException e) { throw e.getTargetException(); } catch (Exception e) { throw new RuntimeException("unexpected invocation exception: " + e.getMessage()); } finally { System.out.println("after method " + m.getName()); } return result; }}
参考文献
java代理机制
oracle doc
- Java 代理,动态代理
- [Java] Java 动态代理
- java代理及动态代理
- java代理模式--动态代理
- Java静态代理、动态代理
- Java 代理之 动态代理
- Java 代理与动态代理
- java静态代理,动态代理
- 代理模式&java动态代理
- Java代理与动态代理
- Java静态代理动态代理
- JAVA代理模式--动态代理
- java 代理和动态代理
- JAVA动态代理 代理模式
- Java动态代理--jdk代理
- Java动态代理--cglib代理
- Java 代理与动态代理
- java代理模式-动态代理
- “浪潮杯”山东省赛 sdut 3256 BIGZHUGOD and His Friends II
- 同步
- POJ1287 Networking(最小生成树)
- flex&&bison
- 一个Android图片(视频)选择器:android-media-picker
- Java动态代理
- HDU 1012 u Calculate e
- 飛飛(十七)用递归方法求a!
- 7 面向对象(成员变量和局部变量的区别,类作为形式参数的问题,匿名对象,封装,private关键字,this关键字,构造方法,类的初始化过程,static关键字)
- 线性表顺序存储结构实现
- 第63课:Spark SQL下Parquet内幕深度解密学习笔记
- CODEVS 1557 热浪
- bzoj 1385: [Baltic2000]Division expression
- SSO单点登录