美文网首页
Java 动态代理

Java 动态代理

作者: Statham_Jessie | 来源:发表于2020-03-01 22:57 被阅读0次

    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

    相关文章

      网友评论

          本文标题:Java 动态代理

          本文链接:https://www.haomeiwen.com/subject/ihdhkhtx.html