动态代理
动态代理简介
在解释动态代理之前,我们先了解什么是代理,所谓代理,就类似生活当中的中介,例如,房产中介,其作用就是充当购房者与房地产商之间的桥梁。将这种思想应用到编程中便是我们所熟知的代理模式,而动态代理可以理解为代理模式下的一种具体的实现,即在实际的调用者与目标对象之间,存在着一个代理对象,这个代理对象可以在调用者访问目标对象时进行一些处理。在某些情况下,我们可能不希望某个对象直接去访问另一个对象,那么这个时候就可以使用代理对象去解决,动态代理的特点就是我们无需自己手动的创建代理对象,值得注意的是动态代理对象必须与目标对象实现相同的接口。
动态代理简单实现
在Java的API中有一个Proxy类(java.lang.reflect.Proxy
),这个类中提供了一个可以获取动态代理对象的方法:
1 | static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) |
这个方法可以返回一个指定接口的代理类实例,也即是说这个方法可以根据所传的参数动态的返回某个类的代理类实例。为了演示这个过程,我先创建一个目标类:
1 | package com.my.proxy; |
1 | package com.my.proxy; |
测试代码如下:
1 | package com.my.proxy; |