public interface Subway {
int i=0;
int sellTick();
}
public class Atmachine implements Subway {
@Override
public int sellTick() {
// TODO Auto-generated method stub
System.out.println("出票");
return i;
}
}
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class DynamicProxy implements InvocationHandler{
/**
* 动态代理
* @param args
*/
private Object obj=null;
/**
* 返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序。
* getClassLoader() - 定义代理类的类加载器
* getInterfaces() - 代理类要实现的接口列表
* this- 指派方法调用的调用处理程序
*/
public Object obj(Object ob){
this.obj=ob;
return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);
}
/**
* 每个代理实例都具有一个关联的调用处理程序。对代理实例调用方法时,
* 将对方法调用进行编码并将其指派到它的调用处理程序的 invoke 方法
* @param proxy 代理对象(注意不是目标对象)
* @param method 被代理的方法
* @param args 被代理的方法的参数集
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("通过代理");
return (Integer)method.invoke(obj, args);
}
public static void main(String[] args){
DynamicProxy proxy=new DynamicProxy();
Subway sub= (Subway)proxy.obj(new Atmachine());
System.out.println(sub.sellTick());
}
}