1.被代理类必须实现一个接口,任意接口
public class Bus implements Runnable{}
2.InvocationHandler接口
每一个动态代理类都要实现一个InvocationHandler接口,该类用来对象代理对象进行方法的增强
public class TimeInvocation implements InvocationHandler{
private Object target;//被代理对象
public TimeInvocation(Object target){
this.target=target;
}
}
3.在动态待类中invoke()方法调用被代理类的方法
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Long time1=System.currentTimeMillis();
//调用被代理对象方法
method.invoke(obj, args);
Long time2=System.currentTimeMillis();
System.out.println(time2-time1);
return null;
}
4.通过Proxy.newProxyInstance(ClasLoader, Class, InvovationHandler)创建代理类对象
5.调用代理对象的方法
Car car=new Car();
//Bus bus=new Bus();
imeHander hander=new TimeHander(car);//将被代理对象传入传力类中
Class class1=car.getClass();
Irun i=(Irun)Proxy.newProxyInstance(class1.getClassLoader(), class1.getInterfaces(), hander);
i.run();