基于JDK的动态代理:利用JDK的 Proxy,InvocationHandler 使用自定义的Handler类,为一个类动态生成代理类,根据需求对方法进行装饰
//1----接口
package hzq;
public interface Animal {
void eat();
}
2----需要被代理的类
package hzq
public class Bird implements Animal {
@Override
public void eat() {
System.out.println("EAT");
}
}
//3----自定义的Handler
package hzq;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class Handler implements InvocationHandler{
Object o;
public Handler(Object o){
super();
this.o = o;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("before");
method.invoke(o, args);
System.out.println("after");
return null;
}
}
package hzq;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class Test {
public static void main(String[] args) {
Animal a = new Bird();
Handler h = new Handler(a);
Animal b = (Animal) Proxy.newProxyInstance(Animal.class.getClassLoader(),new Class[] { Animal.class }, h);//参数2:Class接口类数组 Class[] interfaces
b.eat();
}
}