Java 动态代理

2020-03-01  本文已影响0人  Statham_Jessie

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

上一篇 下一篇

猜你喜欢

热点阅读