1 代理类实现了接口?执行代理类的每个方法都会被替换执行InvocationHandler对象的invoke方法
在invoke中调用 Object object = method.invoke(obj,args);其实还是你自己实现了接口
2 每个代理对象关联一个InvocationHandler
public interface Dog {
void info();
void run();
}
public class GunDog implements Dog {
@Override
public void info() {
Log.d("shj--","我是猎豹狗");
}
@Override
public void run() {
Log.d("shj--","我跑的很快");
}
}
public class DogHandler implements InvocationHandler {
private Object obj;
public void setObj(Object obj) {
this.obj = obj;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
DogUtils.method1();
Object object = method.invoke(obj,args);
DogUtils.method2();
return object;
}
}
public class ProxyFactory {
public static Object getProxy(Object obj){
DogHandler handler = new DogHandler();
handler.setObj(obj);
return Proxy.newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(),handler);
}
}
public class DogUtils {
public static void method1(){
Log.d("shj--","我是method1");
}
public static void method2(){
Log.d("shj--","我是method2");
}
}
public class DogActivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Dog dog = new GunDog();
Dog proxy = (Dog) ProxyFactory.getProxy(dog);
proxy.info();
proxy.run();
}
}