java.lang.reflect下提供了Proxy类和InvocationHandler接口,通过这对组合可以生成JDK动态代理对象。
Proxy提供了两个方法来创建动态代理类及其实例。
static Class<?> getProxyClass(ClassLoader loader,Class<?> interface);
static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h);
从上面可以看到,第一个用于生成动态代理类,如果要创建对象则还需要传入INcocationHandler对象。
示例如下:
interface Animal
{
void run();
}
class cat extends Animal{
public void run(){
System.out.println("cat run");
}
}
class Util
{
void Method1()
{
System.out.println("method1");
};
void Method2(){
System.out.println("method2");
}
}
class AnimalInvocationHandler implements InvocationHandler
{
private object target;
public void setTarget(object target){
this.target=target;
}
public object invoke(object proxy,Method method){
Util util=new Util();
util.Method1();
Object result=method.invoke(target,args);
util.Method2();
return result;
}
}
//创建动态代理;
Animal target=new Cat();
AnimalInvocationHandler handler=new AnimalInvocationHandler();
Animal obj=Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(),handler);
obj.run();
输出会是:
method1
catrun
method2
网友评论