接口
package proxy;
public interface Skill {
void run();
void bark();
}
实体类
package proxy;
public class Dog implements Skill {
private String name;
public Dog(String name) {
this.name = name;
}
@Override
public void run() {
System.out.println(this.name + " run ~~~~");
}
@Override
public void bark() {
System.out.println(name + " bark ~~~~~");
}
}
代理类
package proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class SkillProxy {
public Dog dog;
public SkillProxy(Dog dog) {
this.dog = dog;
}
public Skill getProxy() {
return (Skill) Proxy.newProxyInstance(dog.getClass().getClassLoader(), dog.getClass().getInterfaces(), new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("before----");
Object response = method.invoke(dog, args);
System.out.println("after----");
System.out.println("return:" + response);
return response;
}
});
}
}
测试
package proxy;
public class ProxyDemo {
public static void main(String[] args) {
Dog dog = new Dog("拉布拉多");
SkillProxy sp = new SkillProxy(dog);
Skill proxy = sp.getProxy();
proxy.run();
proxy.bark();
}
}