动态代理- Earl - 博客园

Tank实现Moveable接口,其中有一个move方法

public class Tank implements Movable{

  public void move(){

     方法体

  }

}

我们想在Tank的move方法体前后加上自己的逻辑

 

1.InvocationHandler---- 方法调用的处理器

public interface InvocationHandler {

  public void invoke(Object o,Method m);

}

2.编写具体实现类如TimeHandler实现InvocationHandler

  import java.lang.reflect.Method;

  public class TimeHandler implements InvocationHandler {

      private Object target;

      public TimeHandler(Object target ){

        super();

        this.target=target;

      }

      public void invoke(Object o,Method m){ //o为代理的对象,即代理的方法m属于哪个对象

        代理的内容;//自己的逻辑

        m.invoke(target,new Object[]{});//对带有指定的参数的指定的对象o调用由Mtehod对象m表示的底层方法。如果底层方法为静态的,那么可以忽略指定的object参数,该参数可以为null,返回方法m返回的值

        代理的内容;

      }

  }

3.实现代理:

 public calss Client{

  public static void main (String[] args) throws Exception{

    Tank t = new Tank();//代理的对象

    InvocationHandler h=new TimeHandler(t);//自己定义的代理处理逻辑处理t对象

    Moveable m = (Moveable)Proxy.newProxyInstance(Moveable.class,h);

    m.move();

  }

}   

郑重声明:资讯 【动态代理- Earl - 博客园】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——