java的动态代理用法特别简单,但是用途特别广:
- 安卓的Retrofit框架
- Java的Spring的切面编程
用好了非常有用,可以写出高大上的框架来
使用方法
- 编写需要代理的类(普通类、抽象类、接口)
public interface RealUser{
void function(int param)
}
- 编写处理方法调用的handler类必须继承InvocationHandler类
public class DynamicProxy implements InvocationHandler {
@Override public Object invoke(Object object, Method method, Object[] args)
throws Throwable
{
// 在代理真实对象前我们可以添加一些自己的操作
// 当代理对象调用真实对象的方法时,其会自动的跳转到代理对象关联的handler对象的invoke方法来进行调用
return null;
}
}
- 使用Poxy的public Object invoke(Object object, Method method, Object[] args)来生成代理对象
DynamicProxy handler = new DynamicProxy();//用来处理代理对象,在调用方法时的具体业务
RealUser tealUser = (RealUser)Proxy.newProxyInstance(handler.getClass().getClassLoader(), RealUser
.class, handler);
- 当代理对象调用真实对象的方法时,其会自动的跳转到代理对象关联的handler对象的invoke方法来进行调用method.invoke(subject, args);
tealUser.function(0);// 会调用handler的invoke 方法